|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 Y) Q O+ q2 k( Q5 T' U4 }
#include <linux/init.h>
$ p) J8 D# T" F5 v2 ~* [#include <linux/module.h>% M/ o$ J- Y2 R$ E* `
#include <linux/kernel.h>
; t* ~) _* |% I/ W% I; |, P#include <linux/types.h>+ v) r' }% z, M1 d
#include <linux/gpio.h> s2 M% s# r6 D g9 e
#include <linux/leds.h>
( {8 w* O. Z; N3 A; H* B9 y#include <linux/platform_device.h>
1 r4 S A. S; f( F7 t" n" v6 R! u( f: T; m$ q1 n
#include <asm/mach-types.h>
+ j- t0 _' E2 }4 F#include <asm/mach/arch.h>$ Y; r" A" g8 M9 j: `
#include <mach/da8xx.h>; z3 G( E# j8 ^. k
#include <mach/mux.h>
l. K# B; C) r# N/ G! ]# }' x! P
; ~9 ^; v1 s# N6 d8 i8 K#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, ?6 g/ i- O, c0 [% f5 A#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 Y/ {- |: k, Q6 i6 f
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 \ {1 p/ E6 C0 K3 x" f0 B
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, t0 Y7 @5 l' c% ?% ^* a* W
. d) a1 g! \- x" R, g/* assign the tl som board LED-GPIOs*/
% t; S3 B0 K2 ?, D+ J- G& j6 Tstatic const short da850_evm_tl_user_led_pins[] = {
+ p6 f) \* m0 y) E" v% d$ | /* These pins are definition at <mach/mux.h> file */5 B9 O5 p7 [5 z: A4 U! v) b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% P. z) F t1 E- [# a: D p/ q
-11 v' S- A& @% X5 e6 z% m; u
};% Y9 o8 r% H. d* i7 U5 n! d) l3 B
6 v, f' [9 ^3 T/ W+ K3 \
static struct gpio_led da850_evm_tl_leds[] = {
* l+ M; |% o$ w/ x% p {8 I* ?3 N B. x0 Q
.active_low = 0,7 H5 C' P1 U: k2 W3 M
.gpio = DA850_USER_LED0,
+ u. w- l4 Q& c* F2 h c5 ^! k( h .name = "user_led0",
9 b* W8 S$ B" w* t# n9 V$ v4 ~ .default_trigger = "default-on",1 a2 D1 m) s5 M/ G7 E2 B% Z
},8 t' J5 p+ k" i
{
$ v3 f+ ^" a* f, S .active_low = 0,
+ ~8 J: [ n6 s+ ] .gpio = DA850_USER_LED1,* e/ n! s4 I) v3 m8 h. {
.name = "user_led1",3 S9 p" z5 a3 {! h0 E5 X0 F
.default_trigger = "default-on",
7 a/ C/ C9 c! m( O3 ^. c },8 W: c9 j4 U+ p: b
{4 C! l1 X+ q( [4 J
.active_low = 0,0 i$ j4 |1 j# {: v
.gpio = DA850_USER_LED2,
# Z* c& C$ h& H* i$ \8 g4 j/ P) a .name = "user_led2",
: x \- j" L1 U7 C' u; H" P# \) J .default_trigger = "default-on",
" f! z7 L- S& U5 m3 a },% I) J7 m& u6 E- n# b
{
7 H" V6 `7 p- u; q9 {( b/ k- ] .active_low = 0,0 G5 q; A2 G3 S2 P) h# ^5 N; b n
.gpio = DA850_USER_LED3,
: w- X" x7 K8 e .name = "user_led3",7 p% L/ `' P8 \/ m
.default_trigger = "default-on",
+ B4 t5 e$ T/ U' T+ V' O' q },1 r% `, A1 ? a
};7 d1 O N4 Z2 u$ a; w y
4 K+ t7 _0 d: y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# X' r6 k6 Y ^1 J
.leds = da850_evm_tl_leds,3 T) Z8 ] b9 t D- k: ^0 G/ u: x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ e% Q u: a3 K' b) M4 Z4 }% k4 u5 _# {
};" z4 O: K) f$ {& s
M' X2 o1 P5 @0 _
static void led_dev_release(struct device *dev)2 u, y" p& c9 Y- \1 m( m
{
8 E! V% k3 L( G: r2 `};5 q2 Q; i- p; i. |1 a
# J% r, v K9 s+ i* Nstatic struct platform_device da850_evm_tl_leds_device = {4 f$ V" d3 g& R, U3 ]5 d8 x T+ |
.name = "leds-gpio",5 L$ ^/ y. J+ G0 h3 \: r9 d
.id = 1," ` d3 E/ o6 F
.dev = {
' W! z2 V% ~6 a3 K& g6 l6 O# ], @ .platform_data = &da850_evm_tl_leds_pdata,
8 w& S0 E5 B K .release = led_dev_release,
7 p& y7 f8 h; B# q6 S: L }, K: |6 u& M' Q
};
- }, I; c& Y# I* B+ f
, H3 T" O% B6 u+ cstatic int __init led_platform_init(void)
1 Z: U0 x, J( t5 A8 F5 W4 [{
4 Z; F, D- v: C7 N; h) r int ret;
2 W( G/ C1 d$ G$ R#if 09 R: L: P" V% h, P# x8 b3 {
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 X/ J' G% d% a3 l- d; t8 `& d3 J if (ret)" F0 b) H1 E" }1 W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 E& P- u" D% K5 y: l8 s "%d\n", ret);
1 ?1 S- n: B* U3 d#endif
( O! Y/ z& j h% e! ~8 r ret = platform_device_register(&da850_evm_tl_leds_device);/ | _; M( G5 I5 i9 E: D
if (ret)9 a/ K; \ u+ E& s7 \$ d8 e! r
pr_warning("Could not register som GPIO expander LEDS");
& b# n5 \' X2 E3 K" A% V1 V else
% [0 W. ?9 U* Z$ o$ x1 H* C* J5 b' W printk(KERN_INFO "LED register sucessful!\n");0 r9 i: s5 z3 ]% ?* {* l( P% V: ^& a! Y
& N/ s: O4 m) j7 |1 h/ S! u
return ret;/ Y+ y0 {: r- U' e6 w: S& K
}
" D4 g7 V8 K$ r: I5 Z- Y- @/ e; v% S4 m; ?. O
static void __exit led_platform_exit(void)$ U4 y6 v+ b0 A1 a, U& P; w s
{+ h! D) R. n; m! b; t
platform_device_unregister(&da850_evm_tl_leds_device);
( P& @1 q# Q8 A/ y% ~+ e
3 Y. T- K; p$ M* E( c5 R printk(KERN_INFO "LED unregister!\n");
# Z8 S& `) D9 O* _} C- l) p: }$ K. E7 S( C4 \, a9 U' n' K
! K$ L% L- P0 P& Q5 a
module_init(led_platform_init);7 s; C' y* o! P( X+ i5 P
module_exit(led_platform_exit);; W6 }) n7 h3 D# K: x
) q: l5 Y' b+ h! J7 }8 I% p& {8 K- IMODULE_DESCRIPTION("Led platform driver");
% k9 D0 I( Q* {: _+ a/ w+ mMODULE_AUTHOR("Tronlong");0 Q' b2 d4 b, B2 |
MODULE_LICENSE("GPL");4 D9 b6 z/ v( k* }; q
+ b c) r( v6 [! ^' T
|
|