|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) |8 z& a1 L& N8 m' N4 n. l#include <linux/init.h>
" J0 i2 { I. f+ [: H) A#include <linux/module.h>
4 `+ A4 @; H4 J3 T- ]#include <linux/kernel.h>0 e; R; c. x% D
#include <linux/types.h>
$ K C" Z# B n( {9 L% \+ [#include <linux/gpio.h>3 ~8 a+ w8 s; ]) Q) ?, ]
#include <linux/leds.h>
# Q) O# D1 J8 v; X1 r0 o- S#include <linux/platform_device.h>
3 W9 t: p0 ?/ r1 u7 m; u" B
+ R) Y- X3 G1 r% T( ~2 M9 t#include <asm/mach-types.h>+ _: O9 v- c4 i; V/ d" o
#include <asm/mach/arch.h>
8 M5 C/ l0 O2 O4 f+ q#include <mach/da8xx.h>
6 l1 w! K) k" l! d. J# }/ T3 b#include <mach/mux.h>
5 }4 r, B" y* L
3 M$ w. K$ g5 e4 c2 _#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 y! J% ^2 v: w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 k& p, j% W, l @6 S, L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 w) n8 N! d" {/ k#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 C& ^0 ?7 {; K+ B* H1 {" g6 f" h @" A
/* assign the tl som board LED-GPIOs*/
' C0 R7 v* Z4 xstatic const short da850_evm_tl_user_led_pins[] = {
* _1 v4 N7 S, |1 ]7 W7 B /* These pins are definition at <mach/mux.h> file */6 J' ?" f( i* W+ G& a1 m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 W5 x3 F: i" v
-1 L9 K7 u! U6 W: y3 S: E L" [
};8 Y2 P0 x1 F( {
5 b7 Q- Z6 y6 n# u- \' T% I( ustatic struct gpio_led da850_evm_tl_leds[] = {
& n2 n, E& B% [+ y {0 a( u+ M2 B3 T6 H
.active_low = 0,6 ~. ?% M' _9 ?) m: D2 J
.gpio = DA850_USER_LED0,5 q$ e- i4 [3 q
.name = "user_led0",
0 k& A/ I8 Z7 i) k .default_trigger = "default-on",
3 m$ [: E# A. t; L! h- o },7 O- r* @2 W& |# j4 B
{# T. R( ~9 U1 ]( D4 A4 v1 l- h
.active_low = 0,, s/ I+ z( b# m- ~; z% X
.gpio = DA850_USER_LED1,! T, G5 ]0 g9 {7 H) @+ e& x
.name = "user_led1",& H S& U0 v1 I5 w) e
.default_trigger = "default-on",
) r8 }# g; P K2 ^9 g2 H1 s },; a6 X9 n% Q: |7 ~ [0 H" e6 J
{
$ r x; E9 f5 L5 i .active_low = 0,0 I$ B3 R' C6 e8 B1 R! @' t6 y
.gpio = DA850_USER_LED2,: q! q9 v# s( @. ^
.name = "user_led2",1 B7 {& e2 t2 X, R. p$ T! k& |' W
.default_trigger = "default-on",& T, a1 S |: C! G4 Y
},1 @; y) d8 e; M1 Q* _% ]. S
{
5 B m1 Z( s0 [, z% T .active_low = 0,- C D, A" n3 X# o& j ~
.gpio = DA850_USER_LED3,/ q; V+ r0 d) z( {+ _
.name = "user_led3",
& [/ |6 p, @; b% ] .default_trigger = "default-on",
, h3 r# W- ?! V1 }$ Z* L6 g0 H },. S5 I) D8 m1 v0 }2 k
}; R+ T, I: f0 K9 D
# G! d' |" O' Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" g$ m& X$ R' H* x
.leds = da850_evm_tl_leds,
# W: H1 k `5 _( A! H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( B5 K) n9 D# d* y8 ^
};7 J4 p$ ^ A4 z3 | A
8 k7 s8 `* G; Y# @- @ ^& R6 e1 w
static void led_dev_release(struct device *dev)- P' s! k" V) s$ I/ B# A4 J
{2 f/ S$ x) Y7 a' M7 `: ]
};
4 e( i3 I, E8 _0 ]+ X, o
/ R) S ?1 O$ ^+ }) K- Q0 f( |" Nstatic struct platform_device da850_evm_tl_leds_device = {' H+ n$ V' E* p3 y% X
.name = "leds-gpio",
9 }; \. ~! S5 l7 |. c) ? .id = 1,. V( f5 `5 [- f- G2 A
.dev = {/ _8 W2 \+ U; f" l
.platform_data = &da850_evm_tl_leds_pdata,
" q0 K. d" G2 m8 q0 e .release = led_dev_release, m4 S, k: r% |/ Y6 \5 ~5 n: Z
}
3 O z1 F* B9 t$ T( y1 l};
) ?2 A4 a$ ]+ z! h) E" I3 \ x. L
* p! \7 B+ P. F, x, u6 x" Estatic int __init led_platform_init(void)
* {# o; g5 i: N( A. t4 g& j1 {/ ^{% z0 F* Y. ]7 U9 l3 Q5 s9 q4 d' a
int ret;+ U; e' {/ f) C5 N* K5 b6 `
#if 0
' q7 a% e2 @, N- w8 a" S9 [ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" ^% a) l; P a% d+ |# v if (ret)3 H- a0 y) e" |( o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' \ Y; J& c" j: O3 R2 b
"%d\n", ret);
* k2 e/ C- y* v! ^7 H1 u#endif* ]5 E- f, c* n1 e: h( X
ret = platform_device_register(&da850_evm_tl_leds_device);
0 f" U1 Q) o' k( D9 g* M if (ret)
4 f/ n3 E3 l4 |6 M- W+ A pr_warning("Could not register som GPIO expander LEDS");- |6 T* ?/ C3 v6 a( Z5 r
else f. J" A* D: @$ ] L
printk(KERN_INFO "LED register sucessful!\n");
- H4 d8 _" P% F: M* H9 |: ?3 @
* x. A8 o8 O, O; e. D return ret;3 P1 e* B, D! W5 o W
}, ]1 e! _# C, a3 M$ y' p5 q
+ Q0 _0 b0 ?) X" N% d
static void __exit led_platform_exit(void)& v/ q M' \9 Q0 L
{
6 Y) S" R% `( h* \8 B: l platform_device_unregister(&da850_evm_tl_leds_device);
$ F* j" k6 Z. C$ @7 `
7 ^) M! A9 F+ Y1 x* p printk(KERN_INFO "LED unregister!\n");0 y& _& k* q" ]) Q8 l
}
) f9 E9 ]7 u# ~6 E7 b: |) u% J( A( k5 E6 [1 e
module_init(led_platform_init);6 e' e. D& v! ]8 B
module_exit(led_platform_exit);
/ @0 E* N' N' T5 Q; r+ s% i2 o" M& S2 V Q
MODULE_DESCRIPTION("Led platform driver");
+ x' Z& s) F \$ W- dMODULE_AUTHOR("Tronlong");3 f% c2 l6 x/ s. x' b; I9 O
MODULE_LICENSE("GPL");7 l& P% K+ O- s6 I+ q, h
. p2 ?7 n+ @. N0 R. ~2 p |
|