|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; H2 e. D5 v/ a& E0 j6 s
#include <linux/init.h>
( V3 A% H) }" W6 d2 Y8 o- e#include <linux/module.h>9 R8 u4 G; I; \8 [0 f
#include <linux/kernel.h>
' T9 Y/ k s8 R6 |#include <linux/types.h>4 [+ ]$ l0 G! l2 t. f2 u
#include <linux/gpio.h>% u# w2 j4 O; p' _
#include <linux/leds.h>
5 L/ I* T# @2 D0 P& v" m. c. G# _0 d! G#include <linux/platform_device.h>7 X5 Z" |; @8 g
- I u' s& ~" W" t
#include <asm/mach-types.h>
0 M2 l, V5 V" F! F# p% w! U#include <asm/mach/arch.h>3 {" L# E6 |5 K% b9 j9 r
#include <mach/da8xx.h>8 d0 F( {9 ^1 l% E# B$ c& V* q9 B
#include <mach/mux.h>
2 p# i% Q5 r4 F3 a. d/ Z
5 m1 V; i- \. Z# w. l. m5 y5 C#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 g8 |+ k; v- ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); Q- m1 [9 h0 \& d. F- H3 P% C
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: _4 D. z* c/ r6 Q) E* X! Q% R' `( Z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 |( n4 v$ X5 N- z2 B$ k" I
9 }9 I, A3 V& b* J1 d' q% N, `/ t/* assign the tl som board LED-GPIOs*/
) K2 J f% L6 F# bstatic const short da850_evm_tl_user_led_pins[] = {
' u, }1 Q0 ]4 A U+ o" E% b9 g /* These pins are definition at <mach/mux.h> file *// F+ D2 F, g: R1 F2 O7 a* G/ \ n% g6 n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 p8 {: u2 ] h1 l" v. \& E# { -1
4 s" u' p+ s% E1 _ n' n0 F( h; j};4 K# h; Y, ]) F
% ]9 w, f2 J+ r' w J' R. U d4 D
static struct gpio_led da850_evm_tl_leds[] = {
/ S1 _" @6 W0 B& K* D; E {* Q, N; z# t1 y' m [" a
.active_low = 0,' p4 f5 Q# F* Z5 }2 \0 N
.gpio = DA850_USER_LED0,
) i2 l. B3 ~* U+ c( B+ [5 [- J- G N .name = "user_led0",# ^3 l! @' h% `: w k/ T
.default_trigger = "default-on",
: `! [" B& k! [( b* Y, \0 h `. M },5 o- Y4 Y! D8 M
{
, K8 x* Y5 B' I% r6 { .active_low = 0,! s9 l4 u0 T: n: g" t) Y
.gpio = DA850_USER_LED1,
a% p0 i: v' T) c .name = "user_led1",
- n* j1 D& E. U5 X .default_trigger = "default-on",- m8 `$ [6 X( A0 j2 t$ z( p
},) E* Z5 X1 P+ A# C: i2 h
{# E" S) K4 `! d& l, k. _! {/ |! L
.active_low = 0,/ E8 d O; }7 V( u3 y& d4 {4 K
.gpio = DA850_USER_LED2,
" Z7 }# f- u% k' W' N" d7 N .name = "user_led2",7 [4 o' O \* ^& M" w
.default_trigger = "default-on",
V4 T; z/ X5 ?) f },0 H& @4 S; X0 J: A/ \+ h
{0 J4 T- y: r# ?. \, l
.active_low = 0,- n8 Z1 t; K6 Y3 a
.gpio = DA850_USER_LED3,
- S9 n9 W' c* Q7 e* F0 [& h .name = "user_led3",9 z# Z( M: X1 j
.default_trigger = "default-on",+ |3 T$ i' F" J5 P9 l& @
},+ G9 r. B o/ ~1 O/ y9 _
};
. Z9 k! A2 u% Z) i
' ^; h) _$ O$ {: H( Qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- v+ y% s# i+ z. h# H
.leds = da850_evm_tl_leds,7 y1 g& v0 S9 W: F) u `9 g$ t, Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 q+ N/ n8 M8 }: G8 D% Z, h};
% [7 n: [! K+ ?7 n# v$ \/ d' d$ Q) r- h; i
static void led_dev_release(struct device *dev)0 ?! W3 j4 s/ ~0 C5 k" J# L
{
0 u0 V5 T8 R3 ~5 u# X7 E' k};
* |. U/ @1 V* c+ f5 L
# U- `2 N7 [5 ^* ^static struct platform_device da850_evm_tl_leds_device = {
0 }: i7 e8 {- |5 i- z/ A$ R9 d .name = "leds-gpio",7 {7 H4 l0 X* r7 s: @
.id = 1,3 t$ j" n5 A+ { y# Q9 L
.dev = {- a" _* _) x* A4 Y% D% G
.platform_data = &da850_evm_tl_leds_pdata, ?/ U V! g! g) a* f! _5 c
.release = led_dev_release,
0 A4 d1 {+ U h9 }. k+ S }
: q$ J6 o4 Z8 d5 W# @};* N E7 r, I: F' ]( J& h
G; i2 S6 m9 b5 H/ C4 q, {
static int __init led_platform_init(void)
1 u% R9 T" e7 F, ]; D{
3 s/ Y) b1 ]& K- ]9 I1 N6 D$ W int ret;9 z. J! Z) C/ ~) N- M
#if 0
9 N- B0 V- @+ p! e% t' a: y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 ?3 W2 y. g" k1 |: n; | if (ret)
r# s/ E" ?! K# I3 F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 b# Q$ e0 r/ O
"%d\n", ret);! T) N3 }! B* W$ ?3 {- k
#endif
0 n% M; @2 ^( e X! n) I8 W+ @ ret = platform_device_register(&da850_evm_tl_leds_device);4 o3 s0 y7 q7 E4 X( C! a. t" X0 x
if (ret)
7 ^ g; y. Q0 i pr_warning("Could not register som GPIO expander LEDS");, U) y, [( o6 n
else$ J3 V* v: J6 I1 x/ m4 o6 u3 G N
printk(KERN_INFO "LED register sucessful!\n");
7 ?8 {$ h+ m3 ~8 `! D1 x1 a- p1 M6 c0 x3 J7 ^' ~
return ret;
* _) z* q F7 a D4 o: u}
7 v2 o+ x1 Z& a- }, N
. A9 H2 `% d: z+ wstatic void __exit led_platform_exit(void). }7 q/ W% e& B9 g& j
{: s5 G/ Z( R$ w& H2 r& b
platform_device_unregister(&da850_evm_tl_leds_device);
* p! f" t8 ]$ w" S' l0 b# U1 l- K0 a
- h. T' G4 y0 H" @ printk(KERN_INFO "LED unregister!\n");
0 ^4 `; z) N$ b7 S5 _ n}( ^* j1 g: ]' c' o' v/ f
6 ^, r9 v7 A' H$ |6 h
module_init(led_platform_init);6 h& j" Z* \9 p8 a2 m* ^/ P
module_exit(led_platform_exit);( B1 o3 B1 w9 A7 c; Y
{1 Q" S) S) O6 e& VMODULE_DESCRIPTION("Led platform driver");* t( f. y$ E/ T) c! V: Y8 g9 I
MODULE_AUTHOR("Tronlong");
7 T, s3 M; I9 ~, R# A0 ^MODULE_LICENSE("GPL");
; }5 A( t+ T) I3 }) ]
! n$ a9 Q% d2 F |
|