|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: m* v% M- s$ k! P. b+ @4 x# a/ N
#include <linux/init.h>! X% f* e: A7 Z0 p' D# ~
#include <linux/module.h>
& V1 r/ }- s E- m% Q7 K6 ]3 u#include <linux/kernel.h>: ]# z0 l4 R& T9 X! W1 R
#include <linux/types.h>
. T9 g+ v' K( i% J#include <linux/gpio.h>. d/ J: K) x" L; ~' `7 y3 ^( X" Y
#include <linux/leds.h>
. ?* K4 D4 }% a. ^% v' l#include <linux/platform_device.h>; {$ X6 _% p, {
: W3 X n1 I* M$ P" u& J#include <asm/mach-types.h>
$ c% p- j' l" M4 B9 v8 k#include <asm/mach/arch.h>
* M7 f0 P& ] Q#include <mach/da8xx.h>! N+ ~4 B2 O0 `* x4 C
#include <mach/mux.h>/ h9 ~6 |- ^) D1 s2 D+ q" \
N/ ?* x6 {6 J0 ?
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 B% j, u$ ]5 L. ^3 t- d! m! x# P1 F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# i7 g2 y1 d9 f2 p3 S9 G#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 {4 |) c4 L3 b% R3 Z6 @#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 ]; o" d% _6 R! ]4 H$ i% k6 \; J) E6 `
Z) _) V P$ I* F2 N
/* assign the tl som board LED-GPIOs*/$ v. } V+ }% m; a
static const short da850_evm_tl_user_led_pins[] = {
( s+ Q/ _, N& X7 w" Y7 v /* These pins are definition at <mach/mux.h> file */
; O5 O0 k7 F& | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' S: L" ^- B- ?3 Y -1
" w! `+ [1 S) f0 U};" e9 q/ ^( F* o7 `# E& m
( C1 O, F. K- x, w8 P8 j
static struct gpio_led da850_evm_tl_leds[] = {% G! N! g/ a4 @8 w- x9 M9 `
{
( X J9 C) r1 T; f, E .active_low = 0,/ ]) O" s! y4 f- `
.gpio = DA850_USER_LED0," |' s2 |# p% x9 V: b$ K+ r3 E. K7 {
.name = "user_led0",' z( z1 Q9 z) S) ^5 d' y2 J5 [ B
.default_trigger = "default-on",
: M4 k0 I6 H) g },& k$ {) J" E8 k; k- Q; k7 E
{& [" v; w" Y: ^4 J7 q+ }
.active_low = 0,* h( ]) f8 ~3 I! m* U( }1 {' ]
.gpio = DA850_USER_LED1,9 |' U1 I1 j+ {& t& n3 M( G: |( V2 f
.name = "user_led1",
8 W- Z* G+ }/ R! M n( F3 a2 n+ [ .default_trigger = "default-on"," I9 P) N, _$ y+ T/ C# v
},
- l$ C, |1 ^9 B" K$ K {% d7 V; {' y6 M& [ Q
.active_low = 0,7 D: l' K0 U3 |' w
.gpio = DA850_USER_LED2,
5 {% B; A# Q6 E: E. o9 ~ .name = "user_led2",, K% a0 c, _+ z9 n
.default_trigger = "default-on",
! B& T# Y7 M8 g: Y: M },: l, n+ Y/ V# d0 f
{
7 l' H5 m! T; e: p/ I .active_low = 0,5 E2 l+ s* a# {; f
.gpio = DA850_USER_LED3,
3 G% N4 G- R9 r) Y .name = "user_led3",
1 u- m% `& @% S ] .default_trigger = "default-on",
& ]" |8 P" w P* O },' I O& y( e" Q1 O8 |, }$ C
};
" Q, Z. B) S/ S* Z+ V8 J1 {; J0 |% y6 U5 d5 {) m
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ h$ ^8 I. m# z; W; V" N+ P
.leds = da850_evm_tl_leds,, }1 ^9 Z; W0 w4 q& \% i# h
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- C/ l5 z0 w! G, _6 H( C
};" s$ X) g! `7 l
3 i7 b( c! V1 U5 S4 M% G: C( i
static void led_dev_release(struct device *dev). a' g+ {( ~* `* a- M8 R6 r% t ~; o( U
{3 d) ? v1 a) I8 ]' [ j
};
* t; _3 j6 `8 o# a1 @' s5 J
- _7 d+ ]8 x3 N8 M0 cstatic struct platform_device da850_evm_tl_leds_device = {
, b% c7 t/ P* B) I' C9 m" C" T: Q9 Z .name = "leds-gpio",
. o, ?9 d/ o- i$ S/ ]8 ?3 a: ~ .id = 1,4 i" J R* {* q* v& s7 p' z7 A- W
.dev = {0 N# u) _' y4 }. Y6 ?
.platform_data = &da850_evm_tl_leds_pdata,
" e& k( z j4 q _. L2 t" g .release = led_dev_release,
7 H3 n9 P/ v1 L }! ?' ?0 Q$ O+ t, s4 ~: y
};
7 h+ X j* L7 T, J; b2 z+ T3 e% O
static int __init led_platform_init(void)4 `0 S; K* Z7 H
{
: f2 u# S( D3 U# G int ret;
" k5 O( F/ q8 X8 O3 M#if 0
+ k! U$ L* w; D" T ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 t( _* R0 }$ F, Q' x9 c, m0 S if (ret)
1 K- G1 ~' y; r pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 C6 z$ L0 F! Q3 \! W$ j$ y
"%d\n", ret);8 g5 O2 L7 p6 {+ W
#endif
4 @) f' S6 \9 O; _" m3 `* T: K ret = platform_device_register(&da850_evm_tl_leds_device);
# f9 E! D7 v8 V6 ]0 Q if (ret)* Z7 d* |" i4 ]+ _
pr_warning("Could not register som GPIO expander LEDS");
0 ]0 \+ I/ ^/ p7 u9 f4 G M" Z4 v3 n else. B6 ?4 p/ d& f( P2 l
printk(KERN_INFO "LED register sucessful!\n");* D! v! U) d+ m. u- a: \# P
4 ], ^( o: n: ]- o+ l return ret;
( h4 Q, j: e0 Z+ Z( e}- F+ G. {; U! K' E+ @% @6 H
! u+ U* n! q- q: j1 A/ v6 `5 q( ~
static void __exit led_platform_exit(void)4 } F2 z( k! |' d1 O- s% n
{1 ]' {6 o+ ^2 E$ x" ~ x; q0 Z
platform_device_unregister(&da850_evm_tl_leds_device);- l3 x! F7 i0 q; d- E
' x a: ~5 B( p9 e printk(KERN_INFO "LED unregister!\n");
. r0 O# F' W& A8 n) Y$ }' p% |% K}
( A. @- r3 e( m# D6 L1 A5 S7 n/ N9 d: |2 ]
module_init(led_platform_init);2 T S: ~4 `! p( f
module_exit(led_platform_exit);% K& M2 o( P5 v1 p/ m% \
) z& I; R3 t6 h6 i8 q# L8 ~MODULE_DESCRIPTION("Led platform driver");
1 S& `0 }/ m% v8 V) mMODULE_AUTHOR("Tronlong");
6 [/ K8 e# T) qMODULE_LICENSE("GPL");
& I5 ^& P/ b" c5 q* z3 @( c. L s
* @( k" H3 r: M/ k+ G |
|