|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# H$ q) y' y# B% Z- D2 L- y#include <linux/init.h>4 f: K' u3 \! p2 M: {) c
#include <linux/module.h>0 v/ C k! m+ [! Y6 U$ N" c
#include <linux/kernel.h>5 T6 v0 _/ k7 @2 a% M# _9 o+ q
#include <linux/types.h>
+ @1 m) R. j6 Q% W5 O+ @ U, O#include <linux/gpio.h>2 F. d) @- ?4 h7 Z
#include <linux/leds.h>
3 ]- G6 w: m( d! i* ? n8 j#include <linux/platform_device.h>3 p. }7 H" g$ k: h. |) j+ Y
! I/ x9 u- N ?% ~
#include <asm/mach-types.h>) d; c4 s ^# n; t6 `) Q
#include <asm/mach/arch.h>/ L1 f9 g" e# B- g s) y- }0 _
#include <mach/da8xx.h>
3 R, m. l" {) {! E8 P' z#include <mach/mux.h>
# [2 Q' d7 c8 l$ D, X- R& l5 {% j3 X: B; d Z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 R& V. m' l2 K( {. R- N1 W7 |7 ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( c6 p/ O* J9 T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( T+ m. }. X+ ?; h3 \" b$ l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 p8 Q) z+ v2 T3 V7 X8 a h
- r$ G" \' o- q& K1 v) V5 Z/* assign the tl som board LED-GPIOs*/
s) L' E& p4 X! Vstatic const short da850_evm_tl_user_led_pins[] = {
$ E2 M& z; q* Z5 ^8 U /* These pins are definition at <mach/mux.h> file */4 z. F1 x# o9 j
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% U, m. ^9 K* M# z6 W -1
" O4 z, R9 `( @9 ]) G7 W; `};
: Z# ^3 q% |3 b. i {6 _/ d' X+ }2 v4 O5 T
static struct gpio_led da850_evm_tl_leds[] = {
2 v; F. `1 I) d9 r {
& [8 j( L; m' X& K, l .active_low = 0,
\' {; B1 J: K+ c .gpio = DA850_USER_LED0,; e5 c0 u: N) C; O6 P; i
.name = "user_led0",
# f! _! m1 W( c) H9 e .default_trigger = "default-on",
8 ~8 V( W7 J. G6 J },) E* W* p8 h4 W3 b5 T9 z7 Q: Q
{* u+ r4 h4 m5 }( E; J8 A' _) l, J
.active_low = 0,4 M7 r8 W. m' d: D" L! \3 A' Z: W/ ~
.gpio = DA850_USER_LED1,
- a: F1 N5 n# X: A9 u3 q" w" b .name = "user_led1",3 F7 d, F7 ?. W# L+ J3 z% d
.default_trigger = "default-on",
0 R+ v* x$ a; S2 v8 j I) o Z },2 G/ ~; s/ h% W
{' \5 [) Y/ x# K) M* i
.active_low = 0,
3 O6 z$ d9 R/ H- E9 k .gpio = DA850_USER_LED2,
1 A/ v8 A% O' b5 b7 | .name = "user_led2",4 L6 { O8 N) |% A1 h( _
.default_trigger = "default-on",
9 u: j! p5 A+ X5 l- @4 o! v6 o/ s },6 W! v5 u9 Z+ u; X
{
$ ~$ E0 k3 V+ ^! r$ g .active_low = 0, r. r) M2 f h" S
.gpio = DA850_USER_LED3,3 N) p; d1 G$ Q; o
.name = "user_led3",8 C/ u# _1 n1 a9 B0 W9 C; Y
.default_trigger = "default-on",- G! o; d4 G, i( C. q
},; j/ b" p& n8 Q, k; U
};7 k) k1 z, O( ^! v
2 V Y4 j3 o$ x+ V+ N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ W3 ]5 B7 c& }( t, s. P .leds = da850_evm_tl_leds,
6 l s) o6 J% @( S( n/ }- Z: x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" x- Y# X7 ~3 M. x. K& ?};( I1 ^* M& t+ |! ^
8 B, d2 [$ F4 _4 X" _, y. w( C- nstatic void led_dev_release(struct device *dev)
7 `: T8 u) a8 g. X: D" x H{
# X. K$ t0 i7 Z7 a D4 _* o6 W# O};
) `: v C h% I3 t( Z2 Q7 n
* f% r" A; R$ d! P* E8 v# w; sstatic struct platform_device da850_evm_tl_leds_device = {
5 w" `/ c( A! o L. @ s; x .name = "leds-gpio",
: A( t/ R- f: f" t3 _2 T .id = 1,
& K; M1 k0 q* G0 z/ a# u .dev = {% z. g: Z' H- |7 I& R) [) g
.platform_data = &da850_evm_tl_leds_pdata,
& A( r1 S& w& R7 M. @4 S" m .release = led_dev_release,5 }0 C, N- F: S% c) L) S/ Z
}# ` L3 Z+ i2 T7 E8 x" w
};6 I$ L$ j d2 r; \ k
6 u+ B/ I- _0 i' {5 E% K6 \static int __init led_platform_init(void)
$ a& y2 ]- U7 f9 ^{# B" d) T( L+ J% U
int ret;- y3 s5 x/ x( j5 H* T! g( ?* f
#if 00 Z$ r6 L2 c+ k/ x: U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- {& X# ?. S" n8 P9 R if (ret)6 C+ _3 l5 k+ c! }2 U0 S% d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" ]" ^: ^0 @- F) K6 A "%d\n", ret);
, G, s4 M) I# O# O2 [2 Z#endif `4 z1 T3 S& T3 n; P4 `" a* d
ret = platform_device_register(&da850_evm_tl_leds_device);6 N, r; L6 r( D2 x8 Y! q
if (ret)
- x. q& y3 T0 d5 s" w. Q pr_warning("Could not register som GPIO expander LEDS");% P' V! O- F! a z
else$ U3 {9 Y8 e! b' ^0 y/ r
printk(KERN_INFO "LED register sucessful!\n");
! A. G+ t) O8 \& F+ `( N# m6 x. i0 [' K7 F
return ret;
- [1 x/ B7 ~8 a& _; R: I8 h0 H}' A# m9 \& A2 X/ u' C/ C( ~- ` Y
: _& v' U) T N# Z/ e, k
static void __exit led_platform_exit(void)
- ] A' ]8 C2 J- M$ p/ Q( P' b7 K{
1 a; j; V% I1 z* X2 g platform_device_unregister(&da850_evm_tl_leds_device);
( R% F* p& B. b8 C: z
. h/ ]* b9 h2 e3 w7 J printk(KERN_INFO "LED unregister!\n");
8 g5 [( x% u/ \ ?9 U) h}
+ h% C! K: q7 ^$ I4 m3 z, s% {. f4 A* L5 F
module_init(led_platform_init);1 `' f2 q# l1 \7 D2 g* s/ G1 j* ]
module_exit(led_platform_exit);; v9 g _ s1 V- _, G4 p7 P
! s& O! Z6 R- l0 j+ m* H* O
MODULE_DESCRIPTION("Led platform driver");- r" a6 l! j, R; ?
MODULE_AUTHOR("Tronlong");+ k- s' {8 f6 K7 o: z
MODULE_LICENSE("GPL");
: q8 T( Y9 @& }/ j! I2 ] m" e" G7 Y: v ~
|
|