|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ D% f. ~% Y" ^/ P9 @#include <linux/init.h>
C1 G4 s1 Q0 w& B2 d; L! [#include <linux/module.h># @8 n d& P5 f' a' G
#include <linux/kernel.h>' W; v* w6 W2 W+ _! Z
#include <linux/types.h>
8 y+ |; j5 d4 y: D0 r0 u( ~1 m" _#include <linux/gpio.h>
% I/ _5 h# m( {! j6 p, I) B#include <linux/leds.h>
6 R% g) m8 O! X' }6 x: W9 w* ^#include <linux/platform_device.h>; R7 ` m- G9 \0 u* x
+ t5 h4 P( \% [9 d2 \) P) Q0 E$ d. d
#include <asm/mach-types.h>
0 S0 J- v( u% j! E) w#include <asm/mach/arch.h>
/ j9 X* T$ x$ T" H t+ N8 ^9 I/ ^#include <mach/da8xx.h> W: C) p2 g) u( Y8 e3 k! P
#include <mach/mux.h>$ R; C n5 l3 q6 n6 ~
" |4 J+ t; b. Q1 z# O5 v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 D6 F# B6 `4 x j% d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 P% p+ \8 e9 ?6 [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 T" b. J8 }) V( o7 i/ |5 B" X8 q$ _: `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! W+ r9 c0 p4 n# e. |) t
: o8 Z) D1 x/ v' \0 y0 x# G
/* assign the tl som board LED-GPIOs*/
* d$ u: {: M: Y$ R; {% h0 w6 Kstatic const short da850_evm_tl_user_led_pins[] = {
" E/ W' O' y; e3 ~6 k: i /* These pins are definition at <mach/mux.h> file */
4 i3 Y$ V9 K% u; Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 k) I% H/ Q) q
-1" t$ \2 Y8 W+ D4 y: T2 r; j2 O
};
7 T3 ]& r/ v4 @4 s1 o% m& y2 v! S
% g* P5 }/ Y) j0 Mstatic struct gpio_led da850_evm_tl_leds[] = {0 i% |5 M8 K: O* g K! c) F
{# ~' _+ b. |( h- o& E* C: W/ Z
.active_low = 0,
" w+ ^: K9 J& j- i3 `* `+ ~1 h .gpio = DA850_USER_LED0,
2 v( j& w* H0 i0 b/ a' s .name = "user_led0",2 J9 y, u0 M$ q5 _7 a9 ^- w8 O# Q
.default_trigger = "default-on",
4 O. ]* s- A7 H, o. u" c" Y1 b },
' a* }- V9 }/ E( @3 @8 Z3 M* U {
/ ?; X) z- E# ] .active_low = 0,
( V( Z& Q0 n; h5 g1 k .gpio = DA850_USER_LED1,- s6 ^8 G. I( }
.name = "user_led1",
5 ?" H2 Z0 X% R6 w .default_trigger = "default-on",& Z2 C0 f; w5 {. d) w) [7 j7 M
},. w- @" O" m6 O9 _% X9 ~9 U* X
{ N8 h! M2 Q* g% j9 y3 b
.active_low = 0,2 J9 x: x! I/ `& r0 P
.gpio = DA850_USER_LED2,
6 f. v) Y' x' o E& J/ F( B .name = "user_led2",
- p4 I1 Z* z* ~' i8 [ .default_trigger = "default-on",& \! p9 N ~, m. U( {- n* l
},5 f5 I/ _ Q" X. F
{
) k( u) S( n: G% o! E# \ .active_low = 0,
8 h/ w0 n; |1 g) G N4 m, O .gpio = DA850_USER_LED3,
v' Q$ ]2 @8 ]; M- C5 B6 J .name = "user_led3",
$ k3 g* p8 |/ c .default_trigger = "default-on",
4 K! b+ d. G) r+ k$ o- w: |0 q: } }, W- q- i. `" M5 j D" l( {6 T2 W( f
};
9 _0 h4 K5 s! L& `
2 n) t6 h" S4 F3 ]/ k9 x2 X) F4 Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 R; ~ f0 {3 {6 i& X4 v6 _
.leds = da850_evm_tl_leds," a1 x6 [# a Q- x3 z& Z" h6 I: {! _
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- i7 E0 ~2 r) v8 [, h7 @};7 z, ]9 F: y9 `5 \$ G8 g
' s$ B0 k9 J6 G) G2 p: w+ ^4 jstatic void led_dev_release(struct device *dev): N: t% P4 e y- ?( V
{' K% Q: N9 E7 e" j
};
+ |+ R2 k" d5 |. ?' \% u
/ u0 B3 b" Y4 e" Z* e) f sstatic struct platform_device da850_evm_tl_leds_device = {; A4 U6 ?, r* L( m/ T
.name = "leds-gpio",. S& ^ M8 H+ P a; X8 z* J! p
.id = 1,
. D( ]3 [3 W& C' A, J: S8 X .dev = {
% l9 e- P c: Q .platform_data = &da850_evm_tl_leds_pdata,
4 {" S5 i5 \2 Z' `- Q2 o4 h .release = led_dev_release,
% F9 U0 \0 I2 k" ` }
6 U9 m7 g/ y1 _3 A+ U) ?' N1 m3 i0 O/ X};) J1 I: ^) f9 [5 J4 i7 L" U
' ~; M9 g! L3 _* G( ]1 P: t2 Z9 {static int __init led_platform_init(void). ?) w8 H5 s( o, w+ \
{
+ }+ i, Y+ C0 b7 o int ret;& g7 B) ~' R( O" U
#if 0
: w1 w* x z t, f. R( p( `- @ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* W+ I, k# J, l# d5 L if (ret)
$ u9 g! w" g3 F4 G1 T" s' p5 b pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" e( j* |/ ~9 i e; h "%d\n", ret);! a0 M: m7 i2 Q& `) T
#endif9 z$ \$ G# x, f8 J) k5 x8 `
ret = platform_device_register(&da850_evm_tl_leds_device);% }1 \4 i! A4 B1 t3 ]# A l
if (ret)$ r$ L7 Q7 G, o- H4 d: M. \
pr_warning("Could not register som GPIO expander LEDS");; Q7 I0 I4 M5 ?# @
else
0 M, J# ~" V( Q4 S7 l printk(KERN_INFO "LED register sucessful!\n");
$ H& `# A5 N+ m! ?3 {: {
: k4 v4 J' l# O# A- E return ret;6 r" A' ^- @( w" Q8 d! Y/ b. |
}
8 p0 e+ @! q" n; l' C4 y+ ^1 g
T# ~" K+ N8 W2 o; a/ ^static void __exit led_platform_exit(void). x; r V: q! k* q% a- x
{
, O. C9 G0 A) Y, u v) v) f c platform_device_unregister(&da850_evm_tl_leds_device);& o* ]* ?$ Z) A) Y' i
; m, {* b: S% v" S# M5 ^' f& x
printk(KERN_INFO "LED unregister!\n");5 n5 Y- J" q% D* c9 p
}
( J- {: Z) o/ }, h8 d& Q. u
+ ^' m2 ]" n9 u! L* R3 Kmodule_init(led_platform_init);
1 o8 T. a8 V5 p8 c3 j8 dmodule_exit(led_platform_exit);
: t. C; k, u- k j% F3 G7 F8 a: F$ ?- a' k2 l
MODULE_DESCRIPTION("Led platform driver");6 w" s \3 y1 n) c
MODULE_AUTHOR("Tronlong");
1 o. x- S. {4 N, Z+ q- PMODULE_LICENSE("GPL");
. i4 w7 I/ ~/ E3 M+ Y
4 P! O8 L5 b5 h# ~2 A |
|