|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 U2 d5 u7 u0 |& N3 ~! Y#include <linux/init.h>& J' \, F3 @3 Q
#include <linux/module.h>( R1 P$ ^( s# L+ ]/ X- S
#include <linux/kernel.h>) {* q) o4 N7 f8 B& B; @% U
#include <linux/types.h>* U6 ~! Y) y+ O9 Y9 f7 L. W, ?
#include <linux/gpio.h>
) d4 g6 B4 u1 _# Z9 z#include <linux/leds.h>
+ X( i4 I l1 D. O#include <linux/platform_device.h> \- B+ Y2 X# v; M+ A
( [ v* X9 z. C& h# C#include <asm/mach-types.h>* I' Z/ j; S5 y
#include <asm/mach/arch.h>
2 V z/ B/ X1 F( j, T#include <mach/da8xx.h>
: ~. } {% s4 L1 z#include <mach/mux.h>2 e" b, s2 z# j, X
: L3 z) g0 t. S, V#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 S9 i9 `. u8 @2 u5 N: [& c; S
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# m4 ]3 O! L: c" {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# p! f: C7 X& ^: N) w- @6 s
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 N4 I2 h0 O- N! {( {
5 L+ Q' V# L8 s4 d U8 F
/* assign the tl som board LED-GPIOs*/" Q8 r! g: C6 a1 O
static const short da850_evm_tl_user_led_pins[] = {7 {& D* z. d( D9 s" |, i
/* These pins are definition at <mach/mux.h> file */! g& c/ p& @2 E- A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 T5 i1 f' C' T( F4 j7 G -15 W2 V& |/ E- y2 E( j: K
};' ]* r2 K) {3 D, a. U1 T# E
: j! ~1 @% R4 A: hstatic struct gpio_led da850_evm_tl_leds[] = {' ^' W1 v- g' C- Q$ v
{8 q. }; C+ ~. C. d5 q1 |
.active_low = 0,
) l; F- P [9 T- B' K .gpio = DA850_USER_LED0, T0 ?# [8 Y3 M) ~& c2 a' }0 X
.name = "user_led0",
5 |: g1 B+ t2 [# J .default_trigger = "default-on",
: L+ N7 [: ?; n3 l1 N/ @+ U. n9 O },
# b0 o+ v8 }7 Y+ N5 B% R {
' i- }* G* S* E P; s. a. c .active_low = 0,
# F8 A5 {' Z9 K& a" [ @! e .gpio = DA850_USER_LED1," S; T) L$ V) K+ M% v: p4 P) t
.name = "user_led1",* d, |) _2 P, T3 X
.default_trigger = "default-on",3 ^2 n9 P. Z1 \$ B7 J
},
; r9 E# D5 @- B( t {
1 |: |, {9 a: Q: A' ?: X .active_low = 0,& ^9 J# b' L- C) ~; D6 g7 n
.gpio = DA850_USER_LED2,
$ [. l/ y0 @5 |, F4 V/ K .name = "user_led2",
- p7 j, q- x% w+ D .default_trigger = "default-on",. d i5 _: U6 O
},5 a( R: I0 H. G( x3 A
{
# Y. g/ Y9 ]) E# B8 H' m .active_low = 0,% B4 K( y+ w7 z+ P. z5 Q
.gpio = DA850_USER_LED3,
9 E4 U+ O0 `; n- ^/ b. m .name = "user_led3",: Q, m" }0 _' @* g! v
.default_trigger = "default-on",4 ^6 k& h3 R3 w/ A
}, ~+ O' A; p6 v- R" Z, @: R
};
) G H! Z2 E8 K3 H8 i4 U c8 t* E4 n, y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) K( Z* _3 {) a) H) W
.leds = da850_evm_tl_leds,
" Q0 u! `: x5 O7 c% Z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ d) H Q+ a5 f/ m2 x, {
};
$ k6 _: Q4 k& r% V0 C& ]0 }2 U3 D3 ~6 Q& |* G- [/ U+ U
static void led_dev_release(struct device *dev)3 F$ k& i! t, w, w6 J& D
{3 [8 `- A n6 A
};& v3 z& D7 ?7 S8 `* Y2 H2 ~: G
1 a2 B" \0 s* q; ]7 T
static struct platform_device da850_evm_tl_leds_device = {
) O) D$ b* o7 h, [* k .name = "leds-gpio",
4 L% W7 L& ~- v+ v; `! p: u .id = 1,7 m6 h' D8 l2 B6 o# i8 ^% Q
.dev = {
+ u2 F. V- u3 H6 P .platform_data = &da850_evm_tl_leds_pdata,
( ^: M9 H+ Z. M+ H9 C4 D .release = led_dev_release,2 T0 w7 T4 Y5 B+ z- M" a" W
}
2 Q p8 s: A' \% }};
. C# b4 A4 l0 K: O* g- w9 d7 u; m H0 `: @3 T/ {
static int __init led_platform_init(void)
) B+ T# d) W* i0 ~{
9 `6 C" W; \! B; C4 r int ret;
3 N. _) D& u4 l/ B' [* T( |#if 04 H( i5 D1 g' c1 Y, L
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- l; q5 w, C* ?- F1 Y. w$ M+ I
if (ret)
. K) n- G* l1 a# B. t( m0 d% U* j pr_warning("da850_evm_tl_leds_init : User LED mux failed :": b- |, G! v+ m, L
"%d\n", ret);: Q7 i$ |2 m$ v% F1 _
#endif* m" {' Z. Q! W2 `$ c& ?3 \
ret = platform_device_register(&da850_evm_tl_leds_device);
* c; M8 M) A* z8 F if (ret)! d$ M8 j) d( r; T! D' {
pr_warning("Could not register som GPIO expander LEDS");* o4 B, {8 h* }
else
- h, O+ {1 j3 E printk(KERN_INFO "LED register sucessful!\n");
3 J" d F7 ?$ T, v1 q, c! f# Z1 S. O
& h/ s% h$ Y& W- C" u1 [ return ret;
% O4 g$ e$ c- F6 F2 h+ O# e}
6 w4 K" U3 x7 z1 v Q6 I4 f8 \
3 _9 j1 g% [2 O- V5 t3 Y0 Cstatic void __exit led_platform_exit(void)' t7 n6 I8 Y" n$ [
{
3 i; y- c4 b6 g! l0 P3 H, b5 a4 D( d platform_device_unregister(&da850_evm_tl_leds_device);% Q2 h/ Z0 D3 h7 `
9 ?1 I1 { I6 d( @) }% { printk(KERN_INFO "LED unregister!\n");- Z2 X% Z8 w) L. x# |
}. E5 n4 ~9 n: f' Y+ U5 ^
6 N8 ?3 ]6 T& B& @7 g7 G
module_init(led_platform_init);
# A5 _. P! ^( e |1 Y! Y" umodule_exit(led_platform_exit);$ h) m' ~- D) E2 G
/ P# E$ {6 e) g9 b6 j4 |
MODULE_DESCRIPTION("Led platform driver");
% b9 I {7 O5 W9 l- \9 ^: lMODULE_AUTHOR("Tronlong");, u0 a N! N8 P+ i
MODULE_LICENSE("GPL");
- z H! s: z M9 A( t" a6 i1 t4 J8 H* Y/ x1 Q( R
|
|