|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( j/ g) y# Q- c
#include <linux/init.h>% J6 O* }: L f1 E" I
#include <linux/module.h>0 v9 Q% x9 e+ V1 Y0 Z4 z
#include <linux/kernel.h>$ {. H- } G9 P" z
#include <linux/types.h>
# z/ |/ _- o; L0 Z* P8 M#include <linux/gpio.h>
: H r" m' f8 s3 a" V! L#include <linux/leds.h>
) M8 N. n2 g( p% G0 k#include <linux/platform_device.h>
2 q1 [( B0 H2 q" p0 E' I3 M3 g
, a, H6 Y- @, d6 N#include <asm/mach-types.h>( [/ ^2 s# `, @7 B* M7 B, `
#include <asm/mach/arch.h>
1 B1 m" H+ u' Q$ s% h' V- q$ o#include <mach/da8xx.h>0 P! b, r# h) `- s+ f0 ^
#include <mach/mux.h>
, A0 g% p- _* S) _9 a$ `2 _( @6 `1 q+ _
1 F5 t* {9 M1 L8 ~7 n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ a, ^3 o* k1 i- r4 p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 f9 h* P+ N1 U8 C8 W#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) n5 k, H+ d, @# r2 d( N* I: E#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) ~2 J1 s0 u# e" P+ @; M" A
2 d1 L6 E; e2 z, N5 \
/* assign the tl som board LED-GPIOs*/
$ Q1 n& V t1 ]4 [" u) R% u3 xstatic const short da850_evm_tl_user_led_pins[] = {
- m/ _& z# U- ~6 D3 `2 R- ]8 w /* These pins are definition at <mach/mux.h> file */
; Q) c2 w! w% u DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: r& ~9 B# w6 }( h
-1
: F8 U) x& _! }3 l# \+ Z};
' I4 \& }4 X8 o; ~
8 o7 p2 H/ g$ L5 r9 ustatic struct gpio_led da850_evm_tl_leds[] = {( i5 a" l8 T' ^( c3 _
{
' b; X. y, X+ z% n .active_low = 0,) N3 u6 p S. ~; e7 B. j- r% {
.gpio = DA850_USER_LED0,$ x2 A( M0 f. Q( E& J7 q# o
.name = "user_led0",
7 O+ f) q5 ~8 c$ _ .default_trigger = "default-on",6 }/ k+ v: b+ H7 g+ r$ o
},
' y" y2 G2 \+ R. S' Y {
! K: e2 ]* N/ z y0 F1 E+ s/ n. _! G* g .active_low = 0,
7 o6 E7 H) x* [! {* e* ^9 | .gpio = DA850_USER_LED1,0 l" S; y& o6 Q# y! u, o
.name = "user_led1",; j; N6 y; R7 g( {$ `
.default_trigger = "default-on",( J6 y5 m9 P8 g R1 y# n
},& I4 j. x! N6 L% V* u% O% K
{) F. ~* G q& o/ U z+ E) l. u
.active_low = 0,
; e; a/ z- k4 k+ v ~' P& r! T- U/ | .gpio = DA850_USER_LED2,
2 i: n. W: Z2 {& {* E! `: V- Z .name = "user_led2",
; l4 F4 e5 P' O .default_trigger = "default-on",0 ~: h1 c! K9 `- P: f
},+ x Z+ Y$ \* i/ g' d" f
{; d0 f/ b0 r6 O q
.active_low = 0,( V$ c& K% ^. O) @7 x
.gpio = DA850_USER_LED3,+ M" A! d8 D6 P% W" K
.name = "user_led3",
. T6 o, }. M( V8 ^ .default_trigger = "default-on",3 E D$ a# c* }
},1 G. O1 s9 n3 m2 S, y9 e
};! y* ?4 M5 }; i6 E* k$ U
n( F- t, u5 u5 Rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% y4 f# a% g R- n' h .leds = da850_evm_tl_leds,' t; `9 b& n3 C: |( m$ B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 E! V" U" A3 _# \8 B
};
/ ^6 Z9 d& Q4 }, f% _3 f8 O4 c7 J7 W& C
static void led_dev_release(struct device *dev)
" ~! v- c4 K) v" y, u% K{+ ^8 J2 |8 n$ r; c" Y# U$ a
};4 p& g0 u; J' X! P" w
8 z: ~& ^( ]& E$ Wstatic struct platform_device da850_evm_tl_leds_device = {
) [# k8 N$ f# [8 b& ?$ R .name = "leds-gpio", e' ?+ b% |2 i) p/ C: D/ e
.id = 1,) ], c( T+ g4 d/ h1 I9 ~5 n8 ~7 ]
.dev = {
: {9 V. ]8 _# A) m* k4 u .platform_data = &da850_evm_tl_leds_pdata,( ^* r" X6 L& S/ l N; w( j0 w1 Z2 z
.release = led_dev_release,8 E' s# s( v: I8 c) F. ?* b, Q2 {
}
1 y9 O J. P. G3 ~3 p};+ i$ @. w7 q, H) S, ^8 D
/ ^: Z" ]' l7 {; nstatic int __init led_platform_init(void)
9 ?7 x1 ?# d8 z: N3 x7 p: {8 H{
3 l) @8 d! \; k7 s9 \6 L int ret;
0 ^% D7 m8 F/ V#if 0
7 r8 y5 ?7 l' ?' k0 i7 r" q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ F! i6 ~# z" U- Y- _% y! C if (ret)
9 C1 T9 b9 o% b& i$ F+ b8 r: t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# H& i$ M9 N9 t- l9 l" e "%d\n", ret);
$ Y' ?# R& a% J* q: I3 V#endif; T2 ?5 i* y4 |- H8 G1 k5 R
ret = platform_device_register(&da850_evm_tl_leds_device);
7 m, u. X9 E4 D& c if (ret), v! ?* U1 F. d
pr_warning("Could not register som GPIO expander LEDS");$ }' y* `: u% ^6 }* w
else; e c- B, a9 o7 \# A! f3 M
printk(KERN_INFO "LED register sucessful!\n");& L+ V. d5 B* n8 X
" ~* G2 h+ ^- J2 L/ Y* E( | return ret;4 E" ?/ z) b% ?
}
& ^# c" L8 k/ B* n }% {' O8 U9 a! P C# y( a7 M
static void __exit led_platform_exit(void)
4 C0 E0 i/ y6 g6 \5 K1 v{
# ~$ @- i* p% d. @" i0 k3 X; O platform_device_unregister(&da850_evm_tl_leds_device);
$ k7 v @8 j1 [
# |8 f/ Y1 z; { printk(KERN_INFO "LED unregister!\n");: {. m M9 u* i* o' U8 |% j9 w: [* P/ Q
}
; S, l1 S5 G. k9 y. @ Q- d# c: s" t4 w, {5 k9 C; u$ e: S
module_init(led_platform_init);
& t" A; m* F0 g' z) [ k3 r# Amodule_exit(led_platform_exit);
, C7 v( y, E) O# M x3 o# w
! @' P$ T+ y. T/ wMODULE_DESCRIPTION("Led platform driver");
8 T \8 p: n$ R: p* W4 {9 X( MMODULE_AUTHOR("Tronlong");$ N" _, e q% e; j
MODULE_LICENSE("GPL");
" E$ l/ q5 l" g/ t/ ^- r
) u# O3 G- @# l |
|