|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 ?! B: N* N- I; B z9 F
#include <linux/init.h>
5 J* ~& Z! o+ u# Q( I5 j! K#include <linux/module.h>
( C1 q4 S+ j6 t7 u g% s#include <linux/kernel.h>
+ G0 V- _; ?- G, V9 `#include <linux/types.h># f, n: h) M( E1 p$ m3 m, A
#include <linux/gpio.h>
* w3 Y0 F: G& Y9 u. d2 S#include <linux/leds.h>' }# U& U$ X% H% f
#include <linux/platform_device.h>
5 V6 G N( I. `7 z8 R3 T1 T* J* r8 K6 m4 [9 r$ C+ A3 v4 |
#include <asm/mach-types.h>
9 \' n6 A; J2 I: e$ h#include <asm/mach/arch.h>$ f: n# n) [% f4 v* W
#include <mach/da8xx.h>! r: r& g: Q0 z
#include <mach/mux.h>9 Y4 J* Y# w* T0 L
: \4 P. K5 s+ s% L) H7 ]5 T, }' h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: G% A0 g& B+ h1 ]1 O) N#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: c. m. \' T0 g+ I" o. K& R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# t3 T" J' V M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 x. u8 l0 \# I% O
6 g% i/ \5 W: t, |1 ]6 b5 U5 V/* assign the tl som board LED-GPIOs*/
9 i- v" S; I7 k4 w5 C3 n$ b% e" Z- [static const short da850_evm_tl_user_led_pins[] = {9 E2 v: t6 B, O% V+ U7 _
/* These pins are definition at <mach/mux.h> file */
7 Z! F" Z, }5 ?5 s8 K* O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, x: l1 }( h2 @, X
-1, m1 x' }1 i5 | ]" `! [
};' I p( I" h( Z, |/ N" r9 x
3 \% C, H1 w Y7 z* `' c& P/ V7 ]static struct gpio_led da850_evm_tl_leds[] = {) _ z7 O0 H" W) }$ d9 F
{
' ^0 i/ D% y' d4 S .active_low = 0,$ s6 o- F' Y/ H
.gpio = DA850_USER_LED0,
1 Z3 ^8 D$ X: ?; a" L# W5 F3 @ .name = "user_led0",
4 N0 y& A9 |5 w" Y6 Y .default_trigger = "default-on",
, ~2 Y" R; H3 c },
3 c7 c/ G# N; z {
, _ s8 Y1 @# B .active_low = 0,. ]8 \# A8 B- e/ A% U. d
.gpio = DA850_USER_LED1,5 g' M$ T1 V5 c, E7 y
.name = "user_led1",# m- J& A& }7 i# U$ `# a
.default_trigger = "default-on",! A" Z& Z* T: B
},
$ M1 T4 t4 Z2 ]: W- |4 z5 [1 l {# i4 Y7 r( i9 ? _# b0 H, i
.active_low = 0,0 i3 J, M/ |& }* U4 d% b% J5 y
.gpio = DA850_USER_LED2,9 ?5 Y8 y( U( ]6 ^2 j4 a/ W
.name = "user_led2",
. f9 k; J9 p- \ I+ _+ b .default_trigger = "default-on",
- L) q0 N$ ^0 b5 I* \* b },; {* F+ x( C3 G( @1 \
{
$ G* l( k; F2 u3 x6 D .active_low = 0,
0 N5 ^. R/ t; ]8 _0 x8 o, w/ ~" U .gpio = DA850_USER_LED3,
- {8 C* D5 J% u .name = "user_led3",: A7 b0 ]6 d1 P1 J" W4 R
.default_trigger = "default-on"," X/ l% E \! {" f+ F; b
},
' E% t" M' C; H( W) l6 k0 k/ b};7 F+ C, z# }9 n# f9 G# B: |
\3 B& |: q! u) R; c! }; Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. |: L) Y, Q% B" j5 Y2 [# G
.leds = da850_evm_tl_leds,# f! ], h/ Y# Q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 v8 @3 m" A! n3 Y* ]
};' c: y. m/ H1 r
" T) c; ]% y$ n1 cstatic void led_dev_release(struct device *dev)
$ j" v, y5 n& x& f& D{
+ i( e3 _0 t8 a' ^% q* ^5 o' P};6 g( W$ O/ N! x5 H, {: y
& v# ~8 D, E+ ^9 ~
static struct platform_device da850_evm_tl_leds_device = {3 Q$ O7 m7 R; \) C8 x; U1 k
.name = "leds-gpio",+ h1 s/ @) y3 \9 f9 g' s+ C
.id = 1,
0 T- i( o9 v" c E* m .dev = {! x8 ?+ e4 ~4 v
.platform_data = &da850_evm_tl_leds_pdata,1 `& C% n2 ]5 M) d4 T& M
.release = led_dev_release,
6 T" f3 Q T H# t0 z; p }
4 A( ^! B5 J& H, c1 _- D g& c};
1 S( [/ u& T% ~9 y6 t
- P6 _- _ l. k! g' `. gstatic int __init led_platform_init(void)
" t+ ?- F/ D( z' n$ `" h" y M{
* V+ ]/ s4 t; t int ret;, \; P, P& G) f5 C
#if 01 O2 ]2 o7 g0 v& ]0 K
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! t; s! U- H5 t/ A
if (ret)
: c" ^, Z: F6 ?- V t, N u pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% q5 O' \1 ~7 U, Q& s9 ?# P9 H9 V "%d\n", ret);
1 g9 b0 W, W: M' ?6 P7 d! h#endif# I# P: ?. C' J: v/ o
ret = platform_device_register(&da850_evm_tl_leds_device);
4 ]2 b+ U( M, [( \% ~8 k if (ret)
2 G8 i, {* T& d pr_warning("Could not register som GPIO expander LEDS");
. f& a. z* i' s, r0 c% i else/ G0 h: T* ]% v) }+ @# u
printk(KERN_INFO "LED register sucessful!\n");
% ]- w. G/ h: V! b3 G
- }: f E. Q7 u: e return ret;$ i7 c/ h3 L( Y: z3 p" F: h: O& I
}
/ X, |3 m5 h% D/ i3 S
. P* g% S5 E! b4 U W* d$ sstatic void __exit led_platform_exit(void)4 c2 a% a# r' l: q
{( u1 M2 n( E, F1 Q' c* r: Z$ F
platform_device_unregister(&da850_evm_tl_leds_device);% k; g. q( _% _% q. C# s6 R. @$ z
6 |4 }7 X5 l( J( l2 M! s
printk(KERN_INFO "LED unregister!\n");3 t) E- }/ q! N( `8 P
}
8 C, q; ]$ W2 @" Y% Y; v |3 @& D# h7 i
module_init(led_platform_init);
: W& F" O$ N8 x4 Y; ] |module_exit(led_platform_exit);
+ a4 t" a) F* d+ _3 o8 L, n9 a
0 \! u6 \6 M, Z0 C v2 PMODULE_DESCRIPTION("Led platform driver");. {- S* G% Y3 Z2 [) |: }
MODULE_AUTHOR("Tronlong");* [& q& m, V$ z- }$ _
MODULE_LICENSE("GPL");
* p) X. Y0 z. b: b) ~7 I; O, k& v2 F; |" J
|
|