|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 t' O, x) G: d5 i#include <linux/init.h>
& M, T+ e' S2 n; J$ K" H#include <linux/module.h>
. z! v. l9 @* M, D& @#include <linux/kernel.h>
: L2 j: k- G' u7 r \2 `#include <linux/types.h>% G9 Q: s7 U9 f1 b
#include <linux/gpio.h>( u$ e; U8 v6 d8 t
#include <linux/leds.h>
9 X% }1 J+ ], D8 w+ x#include <linux/platform_device.h>
& W4 P1 l* K/ l
5 A$ h/ m9 r' n n#include <asm/mach-types.h>
1 w" [/ D6 ?; u9 V#include <asm/mach/arch.h>. u& m, S! ^5 _7 }6 ?5 i
#include <mach/da8xx.h>
# A' J( \! P c: t) G$ V0 Z0 y% T#include <mach/mux.h>
7 K, B( u I& L; a2 _! l. G
) P: d) w6 z' s#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 w5 h# ]9 i: V- G4 V/ _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 {# [# a; H* ~2 m# Q% m! j' b$ t8 t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 d f: n, t! S$ I0 o#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 H, M8 Q# k1 c
- \, s8 G8 D+ m/* assign the tl som board LED-GPIOs*/
: v4 c) f# P) z( f. y# m2 Kstatic const short da850_evm_tl_user_led_pins[] = {
' n1 r5 l* \9 n7 ?. _# \ /* These pins are definition at <mach/mux.h> file */
' ~' t/ @3 I9 @) H% w9 b DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ z/ C8 q/ ^. y7 }5 [# ?- h: m
-1. m7 m8 Z7 S: M. d
};% k/ o% c9 ~8 B; P" \; @
& D+ ?; b, _' e! Z R. U, \static struct gpio_led da850_evm_tl_leds[] = {" E P6 w! A' ^, ?; `
{
: k& R+ i' Q& F: v+ m1 }& m .active_low = 0,1 B' G4 ] z' J8 Z3 j" D
.gpio = DA850_USER_LED0,3 X# z$ Z2 G2 n, K; ~
.name = "user_led0",
7 x% M$ I" j0 V4 z: r! R& ~ .default_trigger = "default-on",) N P( z. P1 K" l0 U0 Q7 b
},
; x: G8 R# m8 y- o {
& t. ?7 P) i7 s/ Q* T: F# u .active_low = 0,7 H4 m! w: {! D* ~% W8 Y
.gpio = DA850_USER_LED1,
+ k% \( K* d6 ~$ D: a .name = "user_led1",
3 p8 t; ^6 [3 v .default_trigger = "default-on",
: X" M( h7 U6 e0 t# v },
3 j& ` {/ U' l) E: L5 R {
/ E$ v; C3 W8 E! q* {) R2 _ .active_low = 0,
' Y+ G6 a# P$ ^ .gpio = DA850_USER_LED2,
; ~& N6 X& Y6 I' b0 y .name = "user_led2",
- D j( J7 y2 B# A/ n) x .default_trigger = "default-on",
" E+ M1 Y! L" {1 n" R },0 L3 K* {) G2 N% j6 E
{# @1 X3 _1 O( N2 z, v S: Q2 w
.active_low = 0,
$ |& a) d- P& T0 i& | e .gpio = DA850_USER_LED3,
9 M! I5 H" U4 ?9 f/ A: C .name = "user_led3",' k6 t. o& s; W
.default_trigger = "default-on", D6 T! l6 ]; [+ m2 `5 A
},
3 q' G0 E: P8 W};4 z0 }. h3 v K. J. a1 b: l; N0 P
; K/ q* c2 T4 w9 Y1 _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 R& V/ e" G! i, J6 m .leds = da850_evm_tl_leds,. G* l2 d4 m7 _) \ Z) M
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 Y# R& ~& z- R$ d, p" ?3 ^: q}; P& @) o$ g1 Q- J
* q, a) T, M7 E) Z' z W& gstatic void led_dev_release(struct device *dev)
8 a# z! Z' R" U# R' T9 T{
# ?0 i, W: O, j5 C; @};
9 S+ ~3 H% y# l3 C# i! ?
* c5 }/ M4 V( T* estatic struct platform_device da850_evm_tl_leds_device = {3 R3 _6 h) b. c) K6 k, K2 v" V7 C! _1 ^
.name = "leds-gpio",
' s9 Z0 h! Z; E. Q .id = 1,% n u! `! f2 b$ a. `
.dev = {' {* `: ?5 ]9 j0 ]
.platform_data = &da850_evm_tl_leds_pdata,7 ?6 b" c6 g0 a! V/ O/ g! J
.release = led_dev_release,
4 a! q( m1 ^5 J4 j" s9 q }
: x( s) O$ C9 Z# l3 H% }- U# |};
" v2 n/ T+ u5 i8 i+ d, H8 M. l6 D2 q& j, A! y1 S9 F
static int __init led_platform_init(void)
& i% {) u$ p/ _. w& r9 G) U{
$ ^) t8 p* P- F* A( }4 \3 x int ret;
; p% {) P5 \5 k; I#if 09 Q! _" A3 F E& k6 U& g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 _1 s( y. g5 |' S% f5 H if (ret)
( U' I8 c' a' }6 r pr_warning("da850_evm_tl_leds_init : User LED mux failed :" n$ e' @/ v; B! q+ t% z
"%d\n", ret);7 Q( ~# Z0 b1 _: C; d: X
#endif
& m/ g; \' z$ `3 Z5 I( k ret = platform_device_register(&da850_evm_tl_leds_device);
4 N( ^9 _9 w( ^, U. ?; F if (ret)% O; } m3 p2 C
pr_warning("Could not register som GPIO expander LEDS");; B) T6 v* W& d4 m# m6 \- M4 i
else: N5 _- J9 x3 ~" A8 n
printk(KERN_INFO "LED register sucessful!\n");. P9 Q5 D3 C' I. A- r. \+ ?
6 s4 w9 f1 u. R( m! K( t
return ret;. g- Z; B1 V" ], j) g( P: e
}6 @' I( u9 C0 x) i) ~7 T
$ C- O. M P: I9 b! E6 ^1 Qstatic void __exit led_platform_exit(void)
3 I6 P5 C; Q2 r* Z2 |. _{8 S) q% u7 k1 b# y' Y9 K, I2 E4 ]
platform_device_unregister(&da850_evm_tl_leds_device);
5 r8 u6 e: h" O% b. ]. k
5 w5 I6 g5 ]! w, b printk(KERN_INFO "LED unregister!\n");/ l. |/ `; d& |7 x" j" g
}
! o* C" P$ i6 \% M. E# b# p! I( p6 k
module_init(led_platform_init);
7 c6 i1 O" ?+ r! y5 hmodule_exit(led_platform_exit);3 i4 `' c( z/ K$ C5 B3 b
" T: C6 b9 q9 v4 ]$ h
MODULE_DESCRIPTION("Led platform driver");
^. j( i. p, a, Z) k: BMODULE_AUTHOR("Tronlong");
0 M8 q5 Z `- A# kMODULE_LICENSE("GPL");
8 \3 Q, t1 l( `, E+ E4 e! d6 [% n6 J, K. H2 f. z5 X4 i- Z
|
|