|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ c- d8 k9 L! b* @
#include <linux/init.h>: K8 Y2 H ` `
#include <linux/module.h>0 V9 \, J' Z* ?3 F# c' w
#include <linux/kernel.h>
5 N. S( _/ S7 m: _ h7 l* u* Y$ v3 o7 R B#include <linux/types.h>
2 i3 W' @6 T5 _& X2 K#include <linux/gpio.h>. O P, H: \. _8 z
#include <linux/leds.h>
3 e! u, |" V9 q1 X, A5 ?* F#include <linux/platform_device.h>- [9 S' l9 }. j+ Y
3 F% p0 g0 s/ a# h4 s* L#include <asm/mach-types.h>
, ~7 V4 x. S3 c8 z#include <asm/mach/arch.h>
6 c( S8 h( u4 D, V) @, z" z0 e* J6 P#include <mach/da8xx.h>
1 F# b5 H5 D( Y( @# l* J#include <mach/mux.h>$ {3 [- k# Y) T
d/ q8 A/ J: m# M0 a: A* b" |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 _. q5 a1 z9 [7 n
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! Q# _4 [: o* a# x6 b" C9 R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) k# J1 ~8 Z/ j* \
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 q: r! I! T4 b2 f* v
$ l+ |1 N- M6 ^) j3 i" K/* assign the tl som board LED-GPIOs*/
2 R% A7 t Z. [" x" pstatic const short da850_evm_tl_user_led_pins[] = {
& i$ v, Y s+ c4 y! f /* These pins are definition at <mach/mux.h> file */
4 c5 N4 R7 u+ Z% _ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; ^/ I' d" L: T) w3 f, c2 L: A* s+ r -1( i5 e" d2 b" U1 C0 H/ Q. F
};! h" _% n7 _8 v. C' |
- w& R9 p9 \9 e6 S h4 J
static struct gpio_led da850_evm_tl_leds[] = {% v$ x8 y1 u* I8 a. h, B
{' w! u& `+ K- p, r' h
.active_low = 0,5 n: o+ M7 g5 j$ f* U8 B) I( W
.gpio = DA850_USER_LED0,
9 u8 \) f. d/ [1 O: ?: h* \ .name = "user_led0",
0 c6 A* Y1 [( h: { .default_trigger = "default-on",
- b* `" j( U7 z2 k$ J9 h/ v },
0 _+ r0 ]/ z3 j9 P8 f {
% c9 X7 ~, [: W. P: V- Q .active_low = 0,4 g1 C- [% K; r0 d
.gpio = DA850_USER_LED1," o0 w9 b- }$ ^# x2 f( H
.name = "user_led1",, W3 a( A" z0 O2 b
.default_trigger = "default-on",' \1 M5 d/ B" q* s- l
},
8 n2 u' o" ^ N {3 z6 X! l6 C6 H& y9 q
.active_low = 0,
8 m8 H& N0 Y4 y' s, i4 M) x .gpio = DA850_USER_LED2,$ a: }: T" F, u s
.name = "user_led2",
* z$ q6 z' n& \4 | .default_trigger = "default-on",! A2 O" @/ k! ?6 p. [
}," X: q% i4 Z; m9 }+ F. A) C
{
0 M( u) E4 A) }, K( v .active_low = 0,
$ d. G0 z' F3 ^9 D7 u: w! P .gpio = DA850_USER_LED3,6 f) O$ D9 @4 @5 ]$ G; H
.name = "user_led3",
. g6 a* y4 T# }4 ` .default_trigger = "default-on",
n- V( y: r. ? },
+ ~, k- z2 b, Z0 Q S ^: m};: B! i+ Z( J: v8 {- n9 \% L
+ z8 V3 x$ N% X" G8 Xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
b6 F8 w/ X; j$ m$ y; d8 e .leds = da850_evm_tl_leds,8 L5 D2 e1 @$ Y r) N( _! h( }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 S1 U, x8 m/ C" o0 I( X) _7 |
};; Y# G# b: d% A6 Y3 N
4 P# _3 E! p* R0 r0 x5 ~ Bstatic void led_dev_release(struct device *dev)
- u5 H; R3 c* E3 E. W{
8 _5 @5 M& i! l1 t7 L" C0 ^};9 T2 P5 q9 u0 X8 a3 [. g5 e: m6 @
# K. r6 z: V* T( J0 j$ q
static struct platform_device da850_evm_tl_leds_device = {7 D4 Z2 }7 F. a8 Y2 c K3 [
.name = "leds-gpio",: F. A: H4 v7 ^3 n- q) o
.id = 1,7 x% L7 @; i$ N6 x8 j! s" `
.dev = {
3 F- m6 H% S% L+ N- u g# R .platform_data = &da850_evm_tl_leds_pdata,: y- p7 \: I. f# P, z% N; v w
.release = led_dev_release,
9 P, Z9 C' T& F8 d* f0 @ }
+ O7 E6 A+ [7 U0 d& M6 z};
* |0 ]8 A* e9 }
! v) ~; T" I* k$ M8 \2 Q: Istatic int __init led_platform_init(void): `- h, h7 X) t! R' r
{5 ?5 m8 ^8 n& [: T, H9 [
int ret;9 T+ W. l+ i) S" W1 T ]
#if 0& _3 `* ~0 V& V& @+ z; c% a% K
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. b4 N0 z% }0 j7 g- R7 z
if (ret)9 u4 i% f6 E7 L5 {# j9 T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! q5 \" L/ _' r8 ]2 D, ^ "%d\n", ret);+ L+ C' {3 }! I2 E0 f2 V
#endif
, c; ]9 E3 r! [$ Z9 W, x# l( p ret = platform_device_register(&da850_evm_tl_leds_device);
4 G( T$ v( V' E if (ret)$ H$ D# H. h4 G/ a/ ~
pr_warning("Could not register som GPIO expander LEDS");
2 G3 P8 R: o+ a7 X o0 M else
5 d" c" C+ h/ P; J4 [( A5 @" S printk(KERN_INFO "LED register sucessful!\n");) J; D: T2 k3 k5 ]* _) [! h4 l
# K% k: h3 X e H2 W return ret;
8 _4 |' Y6 g9 W& G1 [+ u. j2 y}, u- U; A# b8 F6 E6 U$ u! t
' k \6 T6 P7 K# hstatic void __exit led_platform_exit(void)$ @2 z0 ^0 d6 h; [& y3 p% k
{
$ s0 ]& _/ G1 z! C platform_device_unregister(&da850_evm_tl_leds_device);
! \* @) V4 N6 t. c5 a4 B @6 {% q S! S
printk(KERN_INFO "LED unregister!\n");# g$ b" d: g4 Y) g* t0 C1 L
}, W$ b2 X* ?3 i: x+ l3 F! i/ W3 [8 A
$ O$ _' |4 P8 i2 d
module_init(led_platform_init);
8 X L7 v) v% N1 ` c/ U4 T. m! bmodule_exit(led_platform_exit);/ @2 ?8 h) o+ M; _4 y
! b. d; y2 w9 i6 [% dMODULE_DESCRIPTION("Led platform driver");
% D. q* o, d' c9 `- ]MODULE_AUTHOR("Tronlong");+ |& x8 d$ J; C
MODULE_LICENSE("GPL");
' k7 _7 ]5 b+ }/ D8 z7 E2 K3 N$ v& @! `& I2 m9 M* s
|
|