|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# D8 U: \- `; [3 a! n7 f
#include <linux/init.h>
3 _5 H% h4 c- Q- P( A#include <linux/module.h>$ _5 e8 x( s5 R: H
#include <linux/kernel.h>
7 }& u. l$ Q4 e#include <linux/types.h>; J9 b& g3 _- N, p/ ]
#include <linux/gpio.h>
, U6 t! w* Y1 l9 c3 C1 Y; D#include <linux/leds.h>8 V, D+ B* j! o$ i
#include <linux/platform_device.h>2 H( U2 B4 i" E4 d" j# e
- P1 M l. x+ }/ n3 n4 l% O0 }#include <asm/mach-types.h>
6 _5 F" H- {. j5 ?+ g#include <asm/mach/arch.h>
9 U8 m1 d& @' G1 D#include <mach/da8xx.h>4 W9 k% T1 u: }0 @) O
#include <mach/mux.h>
3 ` v* U! H7 S
7 j" z/ j, X# [+ V; {8 a9 |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 d, I0 C U0 F3 s2 T#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ \ O! K; Z8 h H' ?0 q t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# p6 r& |% H. C# }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 I. m" Z: s* G* `0 \1 \3 m- e0 u3 o1 l$ P2 c* u
/* assign the tl som board LED-GPIOs*/
, `+ w, S- U" u2 Q$ r% x- nstatic const short da850_evm_tl_user_led_pins[] = {
' T8 @! s. r+ i h /* These pins are definition at <mach/mux.h> file */
* _9 w: f9 M3 d! v- x; i% c5 | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 h- D0 x! [" Z, y& R& \
-15 J7 R7 r7 |( ?/ H( z- j# U" z
};
8 l9 T% v0 V0 W) L* B5 r
& Z0 |% z) ]! @; w2 e) vstatic struct gpio_led da850_evm_tl_leds[] = {
* L+ Y- ?) E4 C$ ]% S. y% \. ? {
$ b' K" [! [7 Y2 \ .active_low = 0,
& O( _8 N: O2 z6 f2 L e+ C9 M .gpio = DA850_USER_LED0,0 \. i- m7 a1 w
.name = "user_led0",) d' U8 w1 [5 {; l0 M7 K# e- `
.default_trigger = "default-on",: L0 C9 k2 R# y$ x
},- Y4 i1 M( h! i+ F
{: y5 N) @1 Y7 b, i" J2 [; \3 ^
.active_low = 0,8 r+ k, t) a; x" ]" G% |
.gpio = DA850_USER_LED1,: k# u0 ?* o. n; _$ }. ?6 d. k9 a/ B4 D
.name = "user_led1",
( w9 o, ~7 H8 X! n6 U4 ~9 s .default_trigger = "default-on",( Z- k0 F; q: ~* e# T. I) l5 u
},
2 {( z V2 Y6 v9 v {& f8 w" g5 H/ f M* l7 O/ W
.active_low = 0,1 c% ?: e6 s( a4 @8 P1 ^9 q) r. Q
.gpio = DA850_USER_LED2,9 t# J1 u0 p" [, f
.name = "user_led2",* ?* g/ X2 [ h/ t" g9 a
.default_trigger = "default-on",- M2 o# v: u @. X
},
) i# d x6 D% j' Z {; s2 w0 S9 n) J9 |
.active_low = 0,! H# ^# t2 [4 j5 j' T3 t! I- _
.gpio = DA850_USER_LED3,
& [( t e6 R ]. M* V- s .name = "user_led3",
2 L) ?) L( Z" O. d5 g, q, _+ W .default_trigger = "default-on",) x! w3 G3 Q; c$ ]
},
4 X" D- b% v# S9 {$ a! f};$ b9 y- c: h% c; s/ o
: J8 V" [. \0 M) T* Z3 C3 Y, L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# L/ H! |+ E! E8 d$ G
.leds = da850_evm_tl_leds,8 B, Y7 L$ V0 o7 F* e7 B. m2 u9 d: X
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 u# {+ x# O; k. }6 q! F; e) {};
8 P* T: r2 W: F
/ r. P' ]" J3 K, |0 ]6 {static void led_dev_release(struct device *dev)
0 p9 o: ?3 V! I9 I{( ?% d# E0 U3 u5 z
};* x. {# r1 e6 X0 M
8 C) z9 ]. f' g% T( _) ^
static struct platform_device da850_evm_tl_leds_device = {
" t8 e' O! {8 U! ] .name = "leds-gpio",
6 A2 A. L5 `1 X o .id = 1,, \, A* ]- f( p
.dev = {
' W @0 ^) p& U) k .platform_data = &da850_evm_tl_leds_pdata,
6 b( C+ H, T y% B# Q: _ .release = led_dev_release,
3 ?! M, b4 W) m0 _ }5 T$ o+ h/ o- K" w" Q
};
@2 ?8 r4 ~# F0 v% G! u
. N& E& c d: H) Nstatic int __init led_platform_init(void)
! D S6 a! x# y; E. N% R4 x{: [& D8 {% E1 c$ Z0 |5 T3 k$ Q& t1 W
int ret;$ G K" P; [/ x1 \: O
#if 0! m3 ]8 \( {1 e6 t
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: Q5 A, v# K# g if (ret)
/ Z( i# m8 ~- U' c pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ w- b# q9 b+ d% b4 y2 K "%d\n", ret);' j% \! H5 u' o6 ], ?- f3 u$ I
#endif
- @2 c4 Z% a7 z2 i- k ret = platform_device_register(&da850_evm_tl_leds_device);, n0 W) [- e9 C/ X' V; F
if (ret)$ ~' {0 H( M8 A
pr_warning("Could not register som GPIO expander LEDS");' R4 V3 y. q' N) V* _
else. ~7 ^* F' [8 B5 F% \9 m( U
printk(KERN_INFO "LED register sucessful!\n");
& l; Y: |' w, d2 U; Q7 R9 Y. t3 z, s' W# C- Q
return ret;# s; P N9 n8 \; X
}: H* J7 M& U( C5 }
9 J3 v& _8 W; x, y' a" Rstatic void __exit led_platform_exit(void)1 L9 `/ M" Z2 K, v+ ?$ @) R' M
{
* M) o8 D" F1 l* j Y platform_device_unregister(&da850_evm_tl_leds_device);% c+ f& Y& W, O
# K3 D& i# d! i: D6 }/ c5 H printk(KERN_INFO "LED unregister!\n");
; n& S, r, s# r) e K7 T}
" L7 i9 O; T3 Q* U2 ^9 w& `; o( Z P+ o
module_init(led_platform_init); ]5 K3 m& z) R' g+ k
module_exit(led_platform_exit);
T$ ]" G1 D$ f# O% U- o6 `0 S% G! V" y& ^& H& U
MODULE_DESCRIPTION("Led platform driver");4 M- j3 b4 m6 u* [7 O
MODULE_AUTHOR("Tronlong");
- S5 a: g2 F* v* s, w9 t: MMODULE_LICENSE("GPL");4 a, P% h+ `" Q# c! G
$ Y v, ? m7 w/ a; C
|
|