|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ t+ I; q9 c9 S i) U' P
#include <linux/init.h>+ n) Z5 P6 F' r) N/ x8 h0 D) v
#include <linux/module.h>
6 e7 H' n9 N2 P" B5 c& z; @, ]8 W#include <linux/kernel.h>% p6 d; h B6 h6 g- J; M
#include <linux/types.h>- _, X2 q% y9 y4 y) o- G
#include <linux/gpio.h>8 X4 S' Y- _; C8 G
#include <linux/leds.h>
& ]/ d+ u. V: X* }7 _" j#include <linux/platform_device.h>
& j! K& U) h3 c# d: W, H0 \% \) V* r0 x" n$ S' K# Q; G+ n' Q
#include <asm/mach-types.h>0 d& o6 Z. {& o$ _7 }) ?
#include <asm/mach/arch.h>' \( H, H# _: k) W
#include <mach/da8xx.h>: F C+ T0 k: y4 d8 ]
#include <mach/mux.h> e f; m$ r4 ^! y
( h) g4 _# D* s+ `. \
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& c" }% x! p& v m#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& D# j6 A$ A3 e6 D6 A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 E% H, g3 G: a0 Q0 A- b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 }# Q/ r: M8 o1 u5 d7 Z, D" _) q
8 V8 _+ l; m5 J' _9 I/* assign the tl som board LED-GPIOs*/
. C9 R8 M) {, t L1 zstatic const short da850_evm_tl_user_led_pins[] = {, i c* x8 a+ y0 d. b; p* I9 t
/* These pins are definition at <mach/mux.h> file */4 h) P. p L% r0 q8 Y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 R: B1 w! ]6 p5 u% @ -1
* [0 f. X7 q' c};. o. C) | ~5 z
- |! Z! q% G2 E6 ^) G$ D2 {1 b* b
static struct gpio_led da850_evm_tl_leds[] = {+ d: ~; i, `1 \* W" ]
{
/ ^3 \0 }! n0 s .active_low = 0,
/ t5 Z: {7 c4 }. t R: \1 Z .gpio = DA850_USER_LED0,
' f5 s, C/ {6 d2 A+ b* ? .name = "user_led0",' ^, N4 F8 B) [- c
.default_trigger = "default-on",. x5 [% F$ O6 l. s5 ?5 \
},
* F' I( @' V% P# J* F. l {+ r$ K0 g8 U3 A- t* T) x. T# u
.active_low = 0,
% l: O" ?0 Z, F: |9 b) B1 J2 b) ] .gpio = DA850_USER_LED1,$ Y7 q- k- q& E- t, d) ?
.name = "user_led1",
8 {: [( J8 o% y5 \8 z, B2 W .default_trigger = "default-on",1 G2 `! O6 G9 q8 Q- r+ y
},
, h2 N: I2 K6 Z1 K( g) p& ]0 M {
3 _2 r& ]- c- ^0 r% L .active_low = 0,0 P! ~& [+ q6 l9 @& J9 r M0 H
.gpio = DA850_USER_LED2,4 `' j, l, M* o# f( E; m8 g
.name = "user_led2",- a/ J, d) A4 L+ l3 L& h! `
.default_trigger = "default-on",3 Z/ I3 C* g( a0 `$ u) H( k& y b
},
& L) |' ^& `& j& H7 x) x {1 ?. i& A( n9 M! L$ G
.active_low = 0,: h9 k5 \! P _# r
.gpio = DA850_USER_LED3,$ ?; u) B" N7 S
.name = "user_led3",& P8 K9 K. Y7 r' e! `8 `3 Q: u
.default_trigger = "default-on",
) ~ T C2 v7 R( O },
; |5 m+ L% e. Z, F) l6 f9 l& h2 {};
% j2 Z/ }2 k; o6 ?% n% ?- m" ]
, E" l7 k7 `) {/ a% estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 u8 u: k v! |( u: z$ I! C% Q* y
.leds = da850_evm_tl_leds,& l4 n- N5 V2 h4 w( j1 @
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& F4 Y; z% U5 Y* w2 J7 |
};! H( l3 W# @7 n1 s# w! W
4 N. y& l! l$ {/ }5 e- Tstatic void led_dev_release(struct device *dev) i) w4 o5 ^6 \8 C$ O: l5 x# N: j
{
( X. \) X5 E& p* H6 c# r};; x0 k- ~* l" G, N. y/ M
- O7 S, I$ ~' W9 Kstatic struct platform_device da850_evm_tl_leds_device = {: y6 F) L O+ \. z9 F2 G
.name = "leds-gpio",9 p5 N5 q; }8 o, H; c* S2 ~* R
.id = 1,6 ?( v& W0 I5 v! {+ r1 J/ x" v
.dev = {
8 X! u( x; [4 @, |0 e .platform_data = &da850_evm_tl_leds_pdata,
$ g9 I& g. z6 p" A2 D8 \ .release = led_dev_release,
6 D4 M6 o5 f* {, B4 m$ u+ U }
. ~: w% v1 f$ n. m};# q5 ]1 \1 I( O( k
1 s8 m: ^* y; }' i& Rstatic int __init led_platform_init(void)
) Z7 Y& v/ M( P8 t{0 [2 l% a v' z: ^
int ret;
0 R( C/ q" Y: m. h; ?# e) C#if 0
( r8 ~/ l; M0 k ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 n _) x' G) f$ {# t1 P! G7 b if (ret)
: H' h+ c6 h2 w( U* F# ], T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) i; t$ ]) J3 }+ }7 O "%d\n", ret);# ]$ W# ^" e: f
#endif
' X2 x4 t& _! W ret = platform_device_register(&da850_evm_tl_leds_device);
: y$ n2 E3 ]5 r4 A8 O if (ret)
( o2 D. x; @5 J( q, E% } r, N pr_warning("Could not register som GPIO expander LEDS");* P* w- k9 }; w8 q d7 q
else+ ?( e0 F! }0 d. O' s: A1 ~: |0 N
printk(KERN_INFO "LED register sucessful!\n");; ?3 {$ O2 L. D% K$ A0 [
' m* N% i2 o5 M' W5 H return ret;3 F6 Q# x8 j1 N5 Y
}
: w& c1 r0 ]& b* w
3 O$ Q7 [9 b, x0 P4 h4 N! Istatic void __exit led_platform_exit(void)7 M6 V! Z7 K- n% p' S3 q
{
' Z% o0 F' C8 m! n3 ~' E5 S7 w. j platform_device_unregister(&da850_evm_tl_leds_device);- l |. f! n [4 }
: D( A4 q" `: b( v
printk(KERN_INFO "LED unregister!\n"); m1 a/ X9 V& x+ a/ D
}
, |# e% F0 x/ {0 L# E$ R' a2 c4 x
; y' @0 |# ^9 t* @( u0 R. z9 pmodule_init(led_platform_init);, e0 R0 u1 J1 a- d
module_exit(led_platform_exit);
& O/ u( L6 O5 ^- {2 ?* b9 p3 w5 o a. i( p
MODULE_DESCRIPTION("Led platform driver");* t* q4 o+ Z- l5 R' }
MODULE_AUTHOR("Tronlong");4 m( G- p1 [- y9 u& I& j& Z M# A
MODULE_LICENSE("GPL");
" Z: c' T) p% S/ g3 ^
+ e% B6 v6 H7 T3 s. k6 ` |
|