|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) h; e+ U1 N' C4 r0 L
#include <linux/init.h>
* [) Z* u, @7 f- n#include <linux/module.h>- x; e4 h8 }" ^1 d8 f; {
#include <linux/kernel.h>4 r# {- h$ H0 ~/ |6 V2 i
#include <linux/types.h>
, k: e* K+ y, V* l#include <linux/gpio.h>
; C! a/ }1 s' v% y#include <linux/leds.h>* z" }/ D, z# h" @
#include <linux/platform_device.h>
! L) a1 z8 J1 N+ u' N8 _# B6 _0 W4 J$ l' a
#include <asm/mach-types.h>. {% ^8 L4 A& k0 `. R* \; A
#include <asm/mach/arch.h>; U% h8 ~$ ]0 h# D
#include <mach/da8xx.h>
( | s4 q. F9 m1 G#include <mach/mux.h>
. Q; }, F9 Y: e7 w; m4 H" c9 ?1 o$ e, p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 W; X% X/ c3 ?8 b3 a2 d#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); E0 I( A6 U0 x0 q2 F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 u( U/ J- ?) K; s T1 N' [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( \! z" n7 L3 z; T! U
7 X& }* Y) P A5 b% K- O, w/* assign the tl som board LED-GPIOs*/. v! W8 d1 |5 m
static const short da850_evm_tl_user_led_pins[] = {
# a$ p9 \! V4 D/ f+ u; t /* These pins are definition at <mach/mux.h> file */9 g; `( V: W; L
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ q7 o9 L# u0 i% t
-1& w& K/ i$ G, l$ O! T. C6 x
};
9 X7 X$ F& W+ N" g
, _ P8 z' p. I" U7 P. j! g& Wstatic struct gpio_led da850_evm_tl_leds[] = {
) v( g! `) }1 [ {
2 ?% O2 [( k% h2 |* Y; | .active_low = 0,
' x7 \9 S, o: F2 N! O, K$ @ .gpio = DA850_USER_LED0,2 i x& ?4 R. U- B( q/ U$ m; Y
.name = "user_led0",
+ x1 q1 u! d" c, f$ K7 i- L .default_trigger = "default-on",
( G; E: J$ p$ d2 A! \/ y },
% q+ x6 H" b7 c {
2 m+ k/ ]& s, z' W .active_low = 0, D9 ^ E: H' e
.gpio = DA850_USER_LED1,- P3 e+ {6 R' D6 E4 c O
.name = "user_led1",; [* B9 `0 {0 @& |7 h% n
.default_trigger = "default-on",1 T* c, ?8 q& c% r0 b1 P, x
},
3 G% O% |! S* h& ?( o. s7 p {" X" z8 |& w4 i: z7 c
.active_low = 0,( A$ j) X1 |. `* t$ j3 ?
.gpio = DA850_USER_LED2,9 [1 }! h. x: Y8 v
.name = "user_led2",
7 D7 X/ Z, i( Y: ` .default_trigger = "default-on",0 j+ o- B) j2 o
},* N5 U! j: n# A2 O
{. U9 e# w! [+ L0 h3 X0 A
.active_low = 0,6 B2 g' a2 o, G4 w
.gpio = DA850_USER_LED3,8 q' O' v: D5 C4 l( ]
.name = "user_led3",
0 {- x* ~: g. i6 H. l( \ .default_trigger = "default-on",' f) I4 u; C. O( [% C
},8 `; i& {5 y7 R L, g9 a" z
};
: E, q$ V& @* y. V
5 w% f. S* n& t R" q! x% rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' W S4 v; B* i5 l8 a4 W' L
.leds = da850_evm_tl_leds," ~% q n X4 T0 Q3 L" Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 o/ T( h y5 x& W- k
};
/ L" r Y5 A" u Y v" B! ^( `7 `+ _
static void led_dev_release(struct device *dev)
. |; y1 a* A4 m. `# G{, X: ]) |- Q E6 x2 r
};
- U, |$ @' u0 [/ B, x! u
: h9 k, P7 m) g" Qstatic struct platform_device da850_evm_tl_leds_device = {* [# r! b% W; `& Q" {! I, M8 _8 G
.name = "leds-gpio",4 E3 | {! Z x# z1 r% b" G# s
.id = 1,
' D5 J$ w4 @6 _' A* q .dev = {( t/ ?' q4 t7 @
.platform_data = &da850_evm_tl_leds_pdata,0 Z0 p, R3 I9 C! U3 _
.release = led_dev_release,
6 |, b+ |" o: b, d* x }# m0 X; w9 I( f% {2 W" ~8 p0 C6 ~
};7 f: `7 h6 f9 T: \
1 D) d9 _" P9 K! Q3 y1 _% Ustatic int __init led_platform_init(void) n- V+ z/ a3 u( e* N; u' O
{
0 q4 K5 d1 @9 P9 t; j4 l int ret;
8 h% D1 \) @! h. y) X#if 0
0 {5 |4 D& w; N2 }' W! r) a! u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; ]! C8 ^: _2 @2 ? if (ret)9 [( ?2 P& O# p5 w8 q) K" c0 J
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! z; ~7 n- j* i3 f$ l "%d\n", ret);4 J2 o6 \, _2 u8 K
#endif
# |/ h) X w2 F1 V ret = platform_device_register(&da850_evm_tl_leds_device);
. }9 e y; z( Z if (ret)
5 r3 w9 e6 H0 Y pr_warning("Could not register som GPIO expander LEDS");
+ v; r/ e. h- H6 r: Y K else
, W% ?& f8 X. H ^$ S printk(KERN_INFO "LED register sucessful!\n");
+ m- [6 ?+ }, I
' {. u, o4 t- w+ M& x" R i' ^3 G return ret;
% z7 j4 d5 a$ o}
) m0 [7 k- F6 _* z3 L; R9 N; r+ n* Q
static void __exit led_platform_exit(void)( _5 D& [/ B/ z
{. v6 C+ D# D% C8 [6 P* t+ S. Q* l
platform_device_unregister(&da850_evm_tl_leds_device);
) D8 N2 v& {) f0 s5 \# L' A& T( q3 R# l/ V
printk(KERN_INFO "LED unregister!\n");
/ Z. ~ L) [/ @9 n& V. g3 Z7 X}7 J6 B( {7 q" T7 v8 r K
# S4 L& ~) W3 ^& [# \( W% s L# b
module_init(led_platform_init);7 k7 d3 q2 ]! E5 X7 ~
module_exit(led_platform_exit);6 W6 ^6 x/ _# u) A9 H& X
( K* K1 \2 E* S/ v7 RMODULE_DESCRIPTION("Led platform driver");/ u! n! ], o3 \& U4 D
MODULE_AUTHOR("Tronlong");
, U( ~- e: e: g3 W+ l- |MODULE_LICENSE("GPL");
6 A0 f/ h- t9 ~1 [+ b/ k. D% U( A* P c- T: N: T0 a+ @
|
|