|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, w; B% l+ V' b6 |
#include <linux/init.h>
+ t9 m3 X A N$ W#include <linux/module.h>2 L. Q, D u9 L8 T5 x
#include <linux/kernel.h>
# k% U( q9 q2 ~8 e6 Y) z. k" A#include <linux/types.h>2 j9 I/ e1 B3 G
#include <linux/gpio.h>4 m! |2 U. ^6 c0 n$ o; u4 K* F
#include <linux/leds.h>
$ p; F. r: w6 _. Y! ~0 h% g9 e9 e#include <linux/platform_device.h>% h q+ D$ {* e5 c: d$ S/ [
* \5 K- r5 t3 R8 F+ z. `; S#include <asm/mach-types.h>
1 I/ R4 U8 C- M, I# v#include <asm/mach/arch.h>, [- r) t3 k# z$ F6 V9 A+ S4 y9 e
#include <mach/da8xx.h>3 ` R1 B3 A5 g; O6 Z1 j8 i7 p' n: V
#include <mach/mux.h>* B$ M/ [% t& t+ B
- r& s, R. m4 D+ f5 t) t/ }
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" j% _; |! K3 d) c' p/ W% I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 b5 q' |1 G8 Y+ N- z1 ?5 Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ R5 `2 n& m# m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, f* j+ l% B3 @) ~! Z
+ x6 s6 B5 d8 N' w+ x& }/ a2 l/* assign the tl som board LED-GPIOs*/
3 m c8 z% v$ E8 E4 z& G2 B5 lstatic const short da850_evm_tl_user_led_pins[] = {
! t7 `$ X3 Y; o( M9 | /* These pins are definition at <mach/mux.h> file */$ W6 s' y: x% E
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! H7 o1 A, A: L6 Z5 j* J6 \0 t
-10 x v" \3 S1 b' T- s
};
7 Z. k n: Z) Y/ }0 ~- }9 ?" Z8 |$ k1 q; _ i
static struct gpio_led da850_evm_tl_leds[] = {7 z4 {% Y. d& q# P+ h- m0 t
{
9 _9 [3 h3 v" v# H5 X: G2 T$ D .active_low = 0,* Z: V5 J& }: [
.gpio = DA850_USER_LED0,; y& P1 B4 W1 g
.name = "user_led0",( j$ h; {1 N. t2 W" k: X
.default_trigger = "default-on",- C5 y$ P2 t6 H
},6 d9 j* b7 e. z/ b+ k/ ?
{
2 m$ F' k0 T' s0 Y .active_low = 0,1 U% U G- d" X$ H0 r
.gpio = DA850_USER_LED1,/ k/ I% m* T4 \
.name = "user_led1",
+ ]) @$ x3 a7 [ .default_trigger = "default-on",# _- [6 Q7 a$ F( N# }
},; k4 {' v, x2 i- T9 V# J* z* i
{
2 ?- C' t9 r: s6 ?0 w .active_low = 0,& E8 d4 j8 @' t) S
.gpio = DA850_USER_LED2,; h3 ]8 i" h( \1 _
.name = "user_led2",1 `4 e. E; z* t* X) u" v
.default_trigger = "default-on",
- b3 S9 y' ~2 w" D. y },
# L& R5 V$ e7 K u" i/ p {
4 t) x" _* B: ?9 T+ E# r6 b .active_low = 0,
/ l8 u7 J$ c# ]/ J, F( O. o .gpio = DA850_USER_LED3,7 x: b5 j' d+ C4 R0 e0 A: E6 S* h
.name = "user_led3",$ `; C3 s/ V. K Z
.default_trigger = "default-on",: e6 O [/ Y" N8 L) Y
},
' b. x# y. ~/ a};
& |; F8 ~; ~) W/ `& \6 e0 n5 a$ c3 P% g6 w5 k2 B* J" l, d: {
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 D* l! K) p) S! _9 ?& D S .leds = da850_evm_tl_leds,
7 I m$ W. C/ ` .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; ?3 B0 G! L4 ]6 P& Q. w0 K2 _
};! J8 L! S: Z- u6 y
/ F5 v& J$ K) I/ f5 q* O7 Tstatic void led_dev_release(struct device *dev)" I3 m# Y& g2 }; |+ l# B
{
* _7 q1 `7 ? y- G};8 I* Q) P x% i, J: {- z* r
s, b& B. [: p$ @9 T$ Pstatic struct platform_device da850_evm_tl_leds_device = {
~) U9 {3 @7 e2 L .name = "leds-gpio",
, y5 a# i6 ^3 Z0 q. l" P3 v .id = 1,8 _# [' \1 m, I8 x: w
.dev = {4 `0 i; n" v) j# F' s5 M. b
.platform_data = &da850_evm_tl_leds_pdata,6 [+ p. q& Q# v8 W9 B
.release = led_dev_release,
* Y' y/ J3 s3 C. f8 w7 s }
# u& `9 o" r0 j; V, }! |9 U};
5 j6 d+ o& f% [
4 W2 j( y7 t( W" O: jstatic int __init led_platform_init(void)
3 J* s1 {% e4 J{
- Q1 m4 }4 ^* s T$ F$ G% q int ret;" N' W& ]9 H+ w* Q3 y
#if 0
* j% v/ }# D( I# r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. X; X4 z* N) V! h. q+ |
if (ret)2 O& s/ K1 a. P, G% k! X. r
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 p# i3 @! F% c; H P: |! h% t5 ~
"%d\n", ret);# Q. q5 J P, @) I, N
#endif( o" B1 e2 L0 D* Z
ret = platform_device_register(&da850_evm_tl_leds_device);7 H7 d# [$ ?' v1 _( _# F
if (ret)
, Z0 `! [4 n C5 t Y, f) V4 q# y pr_warning("Could not register som GPIO expander LEDS");( @; K! N/ H2 G b7 r- n
else
7 Y( j5 u8 D+ s& L printk(KERN_INFO "LED register sucessful!\n");
1 {3 O+ b& U( R5 [0 q
" _5 o, ]# p3 D& ~, ` return ret;# u5 d6 T& F& }
}1 j! L' j2 [4 @/ s0 ?5 ?9 ]
! g u4 l$ @* V t) h, ]& astatic void __exit led_platform_exit(void)5 T5 Y$ o/ W/ j$ m. p4 h9 t! a
{* A5 W2 t' @' Q- b$ R, P
platform_device_unregister(&da850_evm_tl_leds_device);2 {# l& [- g) u; [& G- z7 J
5 }, i% I/ W# U$ b. z
printk(KERN_INFO "LED unregister!\n");
, j3 W7 Z8 n E& \3 _}* k7 Y+ C2 d( x+ G# c6 n# Y, `& E2 f
/ f8 g$ @- E. {4 u; p9 R
module_init(led_platform_init);
- o$ ]. j$ Z3 Gmodule_exit(led_platform_exit);; `2 d ~. N, s6 W% C5 D
5 M% F# e+ r9 H$ B" ]% I) gMODULE_DESCRIPTION("Led platform driver");' M" r) M; q) L5 N2 b1 o* n
MODULE_AUTHOR("Tronlong");
0 ?/ Q8 ?* h. B) Y0 ]6 p/ KMODULE_LICENSE("GPL");
) K7 |- f, o1 g9 H. f
( Q/ B; _! B4 s0 M) | |
|