|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- n" K! i) e" s/ c
#include <linux/init.h>) x% J( ^8 U/ @$ S
#include <linux/module.h>3 U. p+ J7 p' {& m( R. e/ u
#include <linux/kernel.h>1 ~! D3 v) C; ^; K
#include <linux/types.h> h* ^) N1 L! q3 y5 c& m" i k
#include <linux/gpio.h>2 Y- v" A- ?' h% z* |6 D2 c
#include <linux/leds.h>
# t/ B; C" {3 P4 @4 g#include <linux/platform_device.h>
p2 s1 i! c C4 i% V# _# W) l
J2 i @6 W# O) a- x1 ^4 H7 u#include <asm/mach-types.h>
, ?7 J F* W* w" Q& r6 T#include <asm/mach/arch.h>
8 \8 O k* I/ v# g; h#include <mach/da8xx.h>
: [9 r4 T6 ? ^) |5 s#include <mach/mux.h>
! J/ k* Z5 J. L2 w8 A/ c/ {( `% x$ N* I/ G
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- x7 m) Z# R# w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! S1 i* K) p8 u
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" L, t2 Y* M/ K. w. E) `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, H5 X+ F- B8 b' d( J# i9 T! x6 @" J& A' V
/* assign the tl som board LED-GPIOs*/
$ V2 m, c% ?' R+ h0 U1 Ystatic const short da850_evm_tl_user_led_pins[] = {
; l2 ~+ J. p9 X/ k" f /* These pins are definition at <mach/mux.h> file */
0 P! X6 z, F' P4 e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 x1 P0 v: L/ ] -1
2 @4 U! F- R! A( ?: s};
4 d- {' F& T' z$ S. L6 C3 W9 C8 \1 \
static struct gpio_led da850_evm_tl_leds[] = {/ K8 \/ u9 R7 A, I+ k% {
{
( Y t1 s1 a* c5 K! C6 K" _7 p0 ] .active_low = 0,
A2 e3 I+ J: K7 Z i; H# @8 Z2 U .gpio = DA850_USER_LED0,
. _7 e, a1 v; i9 H, l# R9 F: E .name = "user_led0",2 ~$ t1 G; n% d) [$ T. B" n
.default_trigger = "default-on",
& T9 D) k; S/ L$ g },! j* y: p( Q! X8 R8 x
{
0 u- Y, T9 a7 A# _2 s9 N. G, R .active_low = 0,/ I( N1 R3 ?: \1 f$ U4 d: z' F' m
.gpio = DA850_USER_LED1,
~3 I& c1 n! L* r$ z4 t .name = "user_led1",0 U- p0 h, F1 H, G) n9 @
.default_trigger = "default-on",
+ U5 D! z W8 k1 M7 o0 g5 T7 V' K },
2 A& G+ K4 Y! Q {' w1 o/ r- R6 k3 I$ z
.active_low = 0,
- o& J& N7 s3 `0 S* ^ .gpio = DA850_USER_LED2,
+ W% E" L0 {: r$ i .name = "user_led2",+ T/ @; d% o1 ]5 g
.default_trigger = "default-on",4 r; E2 c' A, o
},7 z) F1 Q# x! P* E
{2 w j* U- c* `. Z9 t
.active_low = 0,8 I& U3 b1 i& Y% \ n. n2 K
.gpio = DA850_USER_LED3,! y+ @& l8 ?7 t' J
.name = "user_led3",0 V$ f3 ^* W# B4 m: U
.default_trigger = "default-on",* U+ u) \2 ]) D' W( f% R' E
},* L1 d( h' B2 e5 f( T
};
% Q3 d) e0 I/ g! B. \6 L9 h4 I1 D7 X
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- e' V1 [$ b3 s
.leds = da850_evm_tl_leds,) D) @* e2 o1 B2 }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 k5 Z! S2 v/ Z" G
};
$ y' }% V. u) ]- |3 L; _
0 P8 w1 E' b# R p. X- Estatic void led_dev_release(struct device *dev)* t/ x) N- C1 q
{
" x. a: V# W/ z7 D+ J};8 a9 a9 {3 [) l* M; r( i1 X
! u1 m( F$ B, X" ]1 K9 ~" jstatic struct platform_device da850_evm_tl_leds_device = {
/ z ?6 |$ H9 d: N( S* S .name = "leds-gpio",; _' `4 p7 y; m3 ~: T" d- j
.id = 1,
) b1 r" A7 X0 o; C* I .dev = {
. E0 u1 ]1 V8 V7 C3 A% K l/ l' k .platform_data = &da850_evm_tl_leds_pdata,
% a+ d" u( b0 |. f% b- R8 o0 g .release = led_dev_release,
" J: i1 F, O" _8 G% [% K0 t. n }- z F+ U( n, }1 N
};
$ G# D1 Q8 _9 l# X( W4 }" j# [+ Z( g$ a( G( G1 }$ n
static int __init led_platform_init(void)
/ i6 Z. h) h _ m% Y* t{
7 \2 g, U, Q, A8 f% i( v& Q9 A int ret;
& O5 L( V& T: P$ Q @$ z, u#if 0
8 C/ W- V! k y4 V) M; b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 Q. b# w0 d7 G1 w \ if (ret)8 P% d7 S, w, m9 K0 V% l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 E& r- }9 h* w& l4 r "%d\n", ret);- q# p& S) E* f" g; h" V
#endif. I- l3 j; K" M
ret = platform_device_register(&da850_evm_tl_leds_device);& X- R+ j8 {! @* Z: q8 q( v, Y+ }
if (ret)
! J. r% b3 k( {; C# m pr_warning("Could not register som GPIO expander LEDS");6 y0 ]6 @ f1 r; w- W0 ?+ R7 @
else
8 T8 H9 z" ^2 { printk(KERN_INFO "LED register sucessful!\n");/ E, G! v: a; Q
6 U8 I$ N6 N$ k3 L
return ret;7 L; ^6 l" c A, M) o+ X
}
" ~/ o5 v# D* Y Y$ b( O+ v: M9 n3 Q
static void __exit led_platform_exit(void)
: a# R( n/ N( ?6 _) R& K7 U{
( Y K7 i* x7 k platform_device_unregister(&da850_evm_tl_leds_device);6 x5 d, l9 k0 |# v) L- `; ~
& I# K- J, Q' }$ W8 W2 p$ K
printk(KERN_INFO "LED unregister!\n");
: ?8 z$ Y2 Q2 M9 O6 q2 p2 q}. W$ u% n# \4 L8 |+ l g
) L: q& u* @! \/ \
module_init(led_platform_init);4 }5 ]1 u+ |- Z- ~ \5 J( c6 x j
module_exit(led_platform_exit);2 a5 ]8 B/ h$ |9 y
7 M( x8 h4 G4 P: F o+ uMODULE_DESCRIPTION("Led platform driver");9 B9 @7 r$ h6 G6 t( B; W9 s
MODULE_AUTHOR("Tronlong");2 F$ Z+ {: t( n
MODULE_LICENSE("GPL");
/ b. p5 n* O1 L. Q6 ?6 d8 d
, B- O: F! P3 h. |: A4 k$ O |
|