|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" q J( [5 Z+ j) r) i6 |8 ]$ D4 S- e9 m! [#include <linux/init.h>
$ o" |( `3 ?! L$ O. k1 }#include <linux/module.h>( q( S, P0 B G" p1 d
#include <linux/kernel.h>+ G2 x7 _1 f+ `4 t# q
#include <linux/types.h>
% L% H' [; J1 d#include <linux/gpio.h>
{! @- M$ S9 V; M0 p#include <linux/leds.h>4 R% T, h- n* P/ T& X1 T# ~
#include <linux/platform_device.h>3 ~/ t7 @% T5 T: F" ?3 ^# {0 @
6 G( U8 Y8 X/ H9 _2 ~% {( M8 E#include <asm/mach-types.h>! q% V$ O# q! }7 p1 R8 k5 n9 h
#include <asm/mach/arch.h>
9 b0 T/ H6 G; ]# d7 R! M#include <mach/da8xx.h>
7 k, ?; m" r" ~1 `* f% b1 W#include <mach/mux.h>
, A1 _! v! Q, R' ~5 h% T- L2 E- x/ i. J' p, b5 S5 e: F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 z6 P0 q5 ~. C1 _( Q4 P& ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 F( ?% t. n+ g' c# ^# f- @: }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 K; ^* ?/ o$ D8 `$ O
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- e+ f; A r& f! I$ Q
& Y _' i% d$ p4 u: P/* assign the tl som board LED-GPIOs*/
) H3 v5 d1 r( d) A& T( I# K- Kstatic const short da850_evm_tl_user_led_pins[] = {& m$ |; C/ O& I
/* These pins are definition at <mach/mux.h> file */
2 S% V9 y) ? ^/ | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 S# G# I8 a0 H' d D4 ^
-1, S3 j. y) P& D# }9 g
};; a5 k+ ]) `1 ^
% B( p3 `; O4 ~
static struct gpio_led da850_evm_tl_leds[] = {
; p/ g3 l, l, E( N1 P {0 s4 ^6 Y2 P8 G; O
.active_low = 0,
' ~: O) ~7 @5 G: u .gpio = DA850_USER_LED0,
9 D) }+ T: ]* R$ @5 E u .name = "user_led0",7 a: b+ G( _* @4 h8 g
.default_trigger = "default-on",# A' C. e/ T' a! t3 S3 \
},- Z5 O% ~( d* B- N4 X$ m4 n
{
+ k1 Z1 c0 z9 f" `/ l$ V! ` .active_low = 0,7 u# V+ }# c* u6 x7 b
.gpio = DA850_USER_LED1,4 f8 J& y S; G6 Y+ w1 d$ d
.name = "user_led1", r" }2 V9 E! h8 v L
.default_trigger = "default-on",
2 T( q, g; o: l },! D$ k6 k/ e- {& B
{$ p( O" Y% l0 G1 c9 T7 t7 D2 P
.active_low = 0,$ G8 T p. S( Z$ z5 r0 P& C
.gpio = DA850_USER_LED2,& q' j$ U; X4 ?+ G5 i
.name = "user_led2",' B" |: l% W4 ?( n8 Z
.default_trigger = "default-on",
: I7 e. t! N D! I1 }- Y& n9 t },- a$ ~: C1 K1 m4 R. M
{
7 l4 l" r6 s! e# k .active_low = 0,
% D9 X( v3 h( M .gpio = DA850_USER_LED3,
! S5 [% G* U, O* |; L .name = "user_led3",7 p3 h9 b$ j! s5 H
.default_trigger = "default-on",
! G% d/ Q2 }7 ~9 _& E3 V5 S( G },
1 X/ A0 }8 G! b};
7 A* x0 F/ M. a& k1 N$ ]) h* ]0 T: Q/ n/ g V( w
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# G. [5 i- D4 i. U4 B .leds = da850_evm_tl_leds,; {+ P7 T- D' O3 O7 T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 S( B' g2 ?+ m# ^0 E# M+ _; |3 w
};
' Q# f' z s4 H6 D k8 O. W; m* B8 W% G+ ?
static void led_dev_release(struct device *dev): E- ]7 r" k' L
{
/ a% u8 \5 }% s/ s6 n H: }+ w# o2 p};
! u6 s. `7 Z- C! c. _* P: {2 a% y+ J: B" j2 P' N
static struct platform_device da850_evm_tl_leds_device = {
6 J8 L; Y G& M% H .name = "leds-gpio",
4 {$ G X |9 ^0 c7 T- h .id = 1,6 h$ c8 u* R; G7 M
.dev = {7 D% \5 }5 D" F+ V) }3 |
.platform_data = &da850_evm_tl_leds_pdata,
* p' R4 j# Q; H% X .release = led_dev_release,
8 M& X0 _" u6 u! w1 I }: c% o: S! j- H- p. V" g, ]# x* e
};5 d6 M; R, d7 m d
5 \$ I+ A6 D2 T2 [1 i9 T/ n8 Rstatic int __init led_platform_init(void)- \/ L& p' r. Q6 L0 |7 V
{% d, A2 Z0 D/ v, H3 M
int ret;
0 X& x1 E _ F* _#if 0
/ ~& U( U5 b2 ?$ ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 ^# f! L4 z) z x
if (ret)7 q( z; P w7 W; ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; E! @/ W- f& A) P; J. x
"%d\n", ret);5 t1 I5 ?: B$ z' B2 o
#endif
" e8 S9 U+ j/ a ret = platform_device_register(&da850_evm_tl_leds_device);5 K9 q5 ^$ p S/ n L7 v0 Q
if (ret)
6 X( {- h2 N- \ pr_warning("Could not register som GPIO expander LEDS");4 |( j3 }/ t) M a! K- C
else
; r+ C. n' R4 g% ^ printk(KERN_INFO "LED register sucessful!\n");5 S/ z. ], I, N0 t+ e. e6 ?6 }
$ d- Y) s! b; v$ u( q return ret;
- x4 {+ T r0 Z: K4 g* U}% B% D, l/ Y: f6 W( n. k
5 j' w" L5 Z, d( Gstatic void __exit led_platform_exit(void)- |, @" ]* M3 U
{
7 W) n z+ z; K2 Y2 Z$ f2 r6 L platform_device_unregister(&da850_evm_tl_leds_device);4 B, U# R) V) K7 i/ d* n$ k
( { ~; i# c* F* |! C/ o3 |# s
printk(KERN_INFO "LED unregister!\n");2 W3 Z$ \( e" x5 `
}
; Q8 }3 Q" D6 d
! D. w# P6 M9 O* nmodule_init(led_platform_init);8 W/ f0 ^9 }- z8 Z) U0 X- E
module_exit(led_platform_exit);6 v6 |: V9 b8 n' M
7 Y3 Y3 e! g8 Y, T
MODULE_DESCRIPTION("Led platform driver");
0 P) q9 \5 Q- D/ l; JMODULE_AUTHOR("Tronlong");
( K3 Y3 @$ f& Q0 P# YMODULE_LICENSE("GPL");
+ t: M g) X0 y) y) O+ C3 a' F2 Q* O0 Y, `+ s
|
|