|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& R$ s. s8 f0 A. [
#include <linux/init.h>/ e9 ~1 j$ M, s$ r; V+ F
#include <linux/module.h>% w, g% O: X7 A* o# t5 q/ y4 H
#include <linux/kernel.h>
% ^, `1 | e4 `6 ?#include <linux/types.h>+ _/ R8 c) ]; J( ]
#include <linux/gpio.h>
' x3 r F# d( n8 S* m#include <linux/leds.h>% O% k2 K! s$ Y% `8 [. ~0 G
#include <linux/platform_device.h>
3 `0 c. S: d& X5 i" Y
P1 U; _- J+ k( P( m#include <asm/mach-types.h>$ M8 l5 @ O4 ~! _
#include <asm/mach/arch.h>5 B% l- P% [1 C9 Q
#include <mach/da8xx.h>
$ s K% r" J# q& t) y& p#include <mach/mux.h>% m# t9 |; x! I, y; a
4 { s# p! g8 ?) A E5 ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
u( W' B5 C+ D/ Q$ _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 S* q+ T) D% F' Y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% n8 N/ }& t* m3 L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ U: h* W' l, X3 e' @8 _
' p, _& G+ T/ z" f9 `, I, J& v
/* assign the tl som board LED-GPIOs*/2 i3 V' T: h H4 `( v
static const short da850_evm_tl_user_led_pins[] = {5 v4 _6 S1 G. @
/* These pins are definition at <mach/mux.h> file */
5 L' d& G# Y7 f0 n& n: C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 j* j% v% u# F
-15 @& ` L% W+ H0 D; H6 B9 m
};
! Z1 ~" R, g( A. a8 V( {0 I6 C* c. ^* b- A. ]
static struct gpio_led da850_evm_tl_leds[] = {/ k/ J& p- ^/ i2 h+ B2 V
{
, l$ k7 f; l- ]- i/ V9 k: z .active_low = 0,4 h6 A' H: ^6 g& g7 N, ]: q- S
.gpio = DA850_USER_LED0,
0 X6 b, w9 m; V' y6 x. \ .name = "user_led0",
4 K$ z/ M6 u% X+ Y% L .default_trigger = "default-on",* `! l5 Q% h( @, P8 |- p4 _0 a
},* r; f: j) L! F
{6 D; V4 I: y, \% v Z8 g
.active_low = 0,
' s, T- a- Q0 {5 w% A5 S .gpio = DA850_USER_LED1,
. i# t, e5 B' t { .name = "user_led1",1 h7 K% }4 h; Y9 j- l0 \6 K% G
.default_trigger = "default-on",
( p0 \1 z. O% h/ U) l9 f6 J },
E0 j$ a( H4 A" p3 {" J: w, u {
& o/ ~7 I c6 o .active_low = 0,
$ }1 j& f9 K3 x' ?& I# Y o .gpio = DA850_USER_LED2," k6 S, {& o. s, d x: p! }
.name = "user_led2",
0 E1 L0 y A0 w3 ?& E .default_trigger = "default-on",
1 u: c2 d) l' F" R# v },
4 U2 k( n' L& I8 \ {
|" {5 S" o" a5 W; { .active_low = 0,
7 x) w1 t Y; y3 }; K4 b .gpio = DA850_USER_LED3,1 B, E7 L3 J" `
.name = "user_led3",
1 v4 X* j4 c: X" Q. Y3 k- {5 J .default_trigger = "default-on",
7 ~/ q5 V( T$ L8 ^( P' p/ \: E },6 A# N) F: k) N5 k f& i$ V" d" }6 j
};: y" \- y5 T( e% Z4 v i
7 N- H7 q0 T- Y# F; cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% \7 j2 {% r6 a3 T- V
.leds = da850_evm_tl_leds,& A9 ~ R' t9 j) Z1 @% z6 n
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; ?$ _: P! X* v: X3 H};
- T8 J/ }- D/ U+ s$ e
' m2 V! G3 t+ I# k- ]# ]( `/ ^9 ustatic void led_dev_release(struct device *dev)
; x2 i7 |7 j5 M* g. [{
) h0 k3 R% M9 g};! z, c8 n) P! j2 M/ P, F
$ q6 V' M$ u$ X0 x/ `8 lstatic struct platform_device da850_evm_tl_leds_device = {
' C* Q$ B" @- S- _ .name = "leds-gpio",& a5 j' I- B) B G8 i0 X8 @! y
.id = 1,) Z( ^. {1 e, W' r
.dev = {
2 v5 V; q$ C/ M k1 S .platform_data = &da850_evm_tl_leds_pdata,
* K7 F, C) _1 B/ z .release = led_dev_release,6 U# c' }; l5 P# u5 `
}
# R: L2 j! |7 G' ^4 u( ^# y};! s, [/ j) P7 M, e* I" k# @
* C: U. ]0 W, a9 C$ f. ]! \
static int __init led_platform_init(void)
9 _* n" m" t+ B9 D! L{
. v: t9 b& [ } int ret;
" g0 I6 e( e3 _$ x2 I#if 0
' H5 N" g; }8 ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% q; J4 U1 ~# F" ]+ i if (ret)
& c) l: \. f, S4 ]9 A5 M' J pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 @$ Q: B( u) D" C6 g "%d\n", ret);
: l6 ~# `! A3 c1 R& m4 U# x#endif% D& W! }5 r( n" l2 p
ret = platform_device_register(&da850_evm_tl_leds_device);
4 o, B* I8 k" O7 g8 K if (ret)/ b# `$ ], y* H& k7 E2 C3 x- Y# \
pr_warning("Could not register som GPIO expander LEDS");( k+ |; l8 Z4 x6 O3 v
else2 R5 Q5 Y3 y9 Q
printk(KERN_INFO "LED register sucessful!\n");
# ~6 |0 P1 b H% U; T6 n' s( N
9 Z6 X5 W9 D, H3 F2 |; o! F% ~ return ret;# e, P0 H, K6 D
}
9 ]8 z$ ]( ~' ^) n& D" d( g+ Y1 }) d" W3 v' N4 T# V6 G a
static void __exit led_platform_exit(void)
; G0 G4 P. J3 x5 h \5 A* I9 A{2 K' y# C" z5 Z9 r% U! X3 _
platform_device_unregister(&da850_evm_tl_leds_device);
: x! G5 w& A, s) @9 N1 d/ T6 r/ X+ ^8 K H( D, w; q
printk(KERN_INFO "LED unregister!\n");
' q* k% q! U+ V, z$ T) M}
' K2 T9 M, b# h0 Z* v4 d+ M$ ]! c2 R" v
) ^# a& F8 h0 u$ emodule_init(led_platform_init);
$ o1 [6 e, R) h5 J$ y" P3 [module_exit(led_platform_exit);/ h z# Y( k' ~. x( N: Q: g; Q
/ W a- P# m: ]4 _" O
MODULE_DESCRIPTION("Led platform driver");+ Q' U/ a1 \1 O7 y
MODULE_AUTHOR("Tronlong");+ z, D' Q; D3 R! U
MODULE_LICENSE("GPL");
1 [" A6 K/ v) ^ k) e J n# T r; h" \8 o
|
|