|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 T1 G. U7 ?+ b m5 }- B0 l#include <linux/init.h>! x- E1 E* Y0 D
#include <linux/module.h>
4 Y) u/ A" z) `, O. ~#include <linux/kernel.h>4 W6 S/ [/ Y, E
#include <linux/types.h>8 v q$ e/ \/ w, n1 ^6 o
#include <linux/gpio.h>. p T# o) ?7 F$ D3 P. z! l
#include <linux/leds.h>
& U+ B* X+ Z/ f0 U( c( {4 J#include <linux/platform_device.h>
. m( \! T: k& \) C8 P4 o: M9 t: T+ z5 @ k) g1 {" h
#include <asm/mach-types.h>/ E. l# z2 z3 _1 e/ m8 `1 S$ C4 j
#include <asm/mach/arch.h> a9 B6 q6 S* k
#include <mach/da8xx.h>
$ d; `% c$ q$ @! d9 E#include <mach/mux.h>' u3 }7 p; N- U3 z6 f3 U
0 B# K. j, W; Y* n( B#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 H8 ~: z* O+ H8 `. k6 x, y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% Z/ |4 \; v' X# `3 F$ i+ o4 o% L9 ]
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! b* B9 [2 q* ?# V/ y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 D# T7 i2 f# L, X# M. j* v
0 t, F# F! c8 B3 b7 G- h2 G% g/* assign the tl som board LED-GPIOs*/
* `# d+ U! q* k7 V% ~static const short da850_evm_tl_user_led_pins[] = {
2 d7 `; V! S; m0 f! P- v+ j /* These pins are definition at <mach/mux.h> file */, b8 x& x. Z+ a, }8 B9 K* d3 x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
`/ }; U' X" _& l -1
3 F5 B- `/ ~7 j};/ k! O0 T1 L7 L3 x7 {
6 \7 a8 |% D5 I, G# qstatic struct gpio_led da850_evm_tl_leds[] = {, V4 j. g4 I9 {1 P' h9 K* f
{
4 |: D- c" l- A2 ]# w2 }0 ` .active_low = 0,3 a$ m, t- v; v+ [0 w
.gpio = DA850_USER_LED0,
0 |) H8 C7 t) N .name = "user_led0"," {3 F, e9 J& J3 T" p; H' N; k, K
.default_trigger = "default-on"," N% k/ ?/ h( e5 p- P) T) t
},
" m) |3 d5 x8 Z, X, ] k7 \ { @9 X' k {8 \6 {. \& t: E# r
.active_low = 0,
( F1 U. w" I0 F- |$ U R- I .gpio = DA850_USER_LED1,8 A1 t9 X6 k+ O9 a' Y% s
.name = "user_led1",
. u$ }' B9 E. `# {; y! e8 |+ y .default_trigger = "default-on",
' ~7 k0 [! d/ ?9 X9 z5 a7 R0 w- C },/ G5 Q# k% X: \! }; v! h
{0 S5 i( n! X2 z& x/ B: K; ^
.active_low = 0,8 M" W$ z) j$ y) x
.gpio = DA850_USER_LED2,( f; N, s, e: L
.name = "user_led2",
6 |6 M2 I- N2 q3 [ .default_trigger = "default-on",# M8 Y9 B4 U, f5 a: _
},# A! M$ }+ R- |2 y& b2 i
{1 r: w6 l, b* L7 p+ u; G0 L
.active_low = 0,- T- e8 W. ^/ e" t6 }/ N- O3 j7 [
.gpio = DA850_USER_LED3,& N$ @: G) m0 L( \+ {& D, `
.name = "user_led3",7 B# k" @5 J3 n: C: E1 l
.default_trigger = "default-on",6 t% @% P2 P8 y' z. _/ Q. [
},
3 x( h4 D! ], l/ x% y0 o" X};6 Y0 H3 e5 @: B( K
8 H0 k5 t+ e3 K9 n4 \2 ]* Fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = { E9 ]; m* O7 {' {1 s! [! w. c* D
.leds = da850_evm_tl_leds,
) k# F1 O3 \$ a& m' m. i .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; b+ Q! e2 J( z& L
};! ]5 l6 f+ `- b. C8 j4 Y" A
6 P6 _- ~0 Y1 ^$ Q% s
static void led_dev_release(struct device *dev)' X7 z/ l: Q* w7 y8 |
{3 _2 b- k# F7 k A' B* q* P
};
L& u& ?/ x2 w" w9 W2 }9 \" S
! B2 o8 a& a3 r. ?7 Nstatic struct platform_device da850_evm_tl_leds_device = {5 {# L0 W& ?& V4 q
.name = "leds-gpio",5 G) A9 |; M2 h8 ?8 B; Q
.id = 1, P' a4 C/ y; o3 \1 J
.dev = {
0 K. s/ P! `9 k2 J: e0 x .platform_data = &da850_evm_tl_leds_pdata," U- R) g! [9 H6 g5 u- S
.release = led_dev_release,. o& d+ n l9 b1 C6 w
}' r) O/ j! o! l/ W
};
; Q% d) w2 y3 x% N1 Y
. [. Z! u. t8 r9 Istatic int __init led_platform_init(void)
( f" P( D f/ u% u+ C{) S- G# T- x8 J2 `8 ~' e
int ret;- C( A. i1 T! }6 i! @
#if 0
" C% g. k6 w" O3 B3 ?* h/ } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ a/ k( i$ _+ w5 E; L if (ret)
& \2 W7 }2 G( J/ C pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 y1 S+ q. ]3 g7 R. d "%d\n", ret);
2 U- U$ c9 T7 c0 o* g2 M/ X, B#endif
2 d) {* [& P- L7 e2 }" n ret = platform_device_register(&da850_evm_tl_leds_device);* {+ Z- D% G3 d1 u# r9 @" W3 n
if (ret)* o; g: s) A0 s' _" m$ K' P# P7 d
pr_warning("Could not register som GPIO expander LEDS");
- j9 H9 k" R$ h9 y: L; h* z$ ` else
a: q+ A9 _. ~% Q7 R: t printk(KERN_INFO "LED register sucessful!\n");
/ K* M* e9 Q# R% D# g% } J: Q$ f0 |
return ret;
6 o- \1 r7 T4 T: C}
; }+ S) q+ G4 r' I5 ^4 e$ H5 \) Z6 j1 y. J- c6 x
static void __exit led_platform_exit(void)2 J6 z% I+ Y) z: @
{0 z7 S# G) [4 ?. h, J/ w+ c
platform_device_unregister(&da850_evm_tl_leds_device);! F0 C1 p/ ^- ~# q% R$ _/ W
) D, Q% f2 s8 ~1 c7 w printk(KERN_INFO "LED unregister!\n");
1 q$ p3 I5 u5 k0 [}) \% E! t5 `$ l. {! i' W
, l7 h/ S. s, ]7 }module_init(led_platform_init);/ e& Q( y+ [% v5 i% u6 F
module_exit(led_platform_exit);
4 j" i5 w, N: \% |; B( Z: e, H: {/ Q1 A2 ~( V- x
MODULE_DESCRIPTION("Led platform driver");9 h0 Z% f! t; x4 p! b" B
MODULE_AUTHOR("Tronlong");' }, W+ ~' _2 ]: i
MODULE_LICENSE("GPL");
8 T. o/ j1 u( m: t3 i F8 t2 }* H9 T+ f: v; S2 `7 @
|
|