|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; `$ B0 d; c# E6 [( Z& o/ Y
#include <linux/init.h>
8 M3 J7 p1 b9 m/ R R! h" F" j#include <linux/module.h>9 W' r' x6 {: P5 Y Q N3 k- n- \
#include <linux/kernel.h>/ B7 u, n4 q; E: A/ |( |
#include <linux/types.h>$ T* D8 I# K0 d, W
#include <linux/gpio.h>! T r: `9 C, ^+ N
#include <linux/leds.h>) k3 k) c# F7 o' g7 v- f; _2 k
#include <linux/platform_device.h>2 F! @; b2 m4 A$ \1 J) F
1 V0 j2 z8 ^% L, [2 W* _
#include <asm/mach-types.h>
A, C! J+ o0 v% t( t#include <asm/mach/arch.h>
7 R1 `1 L! d3 L% p#include <mach/da8xx.h>
3 M' [# I3 y; y# ~, |* J+ m#include <mach/mux.h>9 ~. o. S: y; s3 e
3 E# \' Z1 R$ F8 y8 ]5 T( m- Z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( L+ |9 w6 B2 H( v# k0 F
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 @8 A' j2 j+ ^) L4 L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' B+ l; L) ?; T; U% J! f/ O- q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; ]4 K7 }0 Y0 k: k' N1 L# x
: u3 E- x$ P9 j) X( h9 W2 Z/* assign the tl som board LED-GPIOs*/
, D. d& s! c* Pstatic const short da850_evm_tl_user_led_pins[] = {0 i S4 H" {" b& Z+ Q& s1 D+ T% h
/* These pins are definition at <mach/mux.h> file */3 L0 R8 X: F6 u4 E. ] V
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 L3 e9 b& S9 L# I( `
-1
. p# I) o+ s! ?* y& M};! _0 a' K% _$ E- F X$ V
- ]& w- @- z6 S. _4 h }
static struct gpio_led da850_evm_tl_leds[] = {( i8 U1 n. X- s. t1 } F+ t+ Q
{
1 i. F5 k9 _+ a1 C/ B .active_low = 0,' H' O! b' W# g
.gpio = DA850_USER_LED0,
( p" F3 V/ n" H; V, M3 ~6 r% i .name = "user_led0",
% c7 a: d$ v, }$ Z b: c9 ] .default_trigger = "default-on",
, v, B8 g- j" b7 j8 \1 U. g },
3 h3 c+ R( K( h0 Y {
# H; [2 N7 w; O( L .active_low = 0,
3 @9 w! c1 r9 e' Q: h% {- p0 w .gpio = DA850_USER_LED1,
- T8 P y* d r .name = "user_led1",
' |$ t' u! p8 l6 ]3 {7 q .default_trigger = "default-on",
0 h' a% ~" [7 }4 T. u$ O7 n },6 d, m8 g6 T% O& [& L2 N: B- C
{* r( {4 J% M8 t' m( v! U
.active_low = 0,: z1 K; Y/ `! B
.gpio = DA850_USER_LED2,) d2 B# z8 L4 ?2 k: W
.name = "user_led2",/ T. r( Y; S& n1 R& R5 [
.default_trigger = "default-on",. Y4 x' n. v) a# o1 w0 q z# E8 Q* E
},
6 ]$ ^1 H9 G: a% v; H {
' e" Z* g) c2 h# K# N6 g5 k .active_low = 0,
; j0 @- V1 D3 Q# }. Z .gpio = DA850_USER_LED3,
2 }3 H% V' ?" K5 i9 U( u# x3 ^ h. g .name = "user_led3",2 x6 f* r9 R" ]2 ?. [0 j5 k/ E( E
.default_trigger = "default-on",
6 x( n. v0 X* \: K2 K3 M },
" r/ l! _6 \% r' B! }4 ^7 V( y};' |6 v' O" k6 D/ w$ g6 i4 K
6 h2 P3 C0 p7 w% B( O4 D' x9 o: j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 o+ ~( H$ A. S9 F' c4 ]8 R .leds = da850_evm_tl_leds,0 G! R$ X9 A X0 y! _! j! R7 ~( j8 s
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% ? s4 w; O' f8 M};3 @% K& Q0 N8 Q
! ^2 L. G! G: O: Y4 M) b3 y
static void led_dev_release(struct device *dev)6 n( |/ p8 o& R! |6 }( v7 A0 z. _
{
/ d/ d7 `0 r q8 Q5 J};
# D2 }1 G/ \1 s( j
3 \( s5 ?4 f `3 I+ X5 qstatic struct platform_device da850_evm_tl_leds_device = {
" m% U9 r: O" s: S) V+ |8 u G .name = "leds-gpio",9 [& t$ R+ H8 C7 ], u% d( i
.id = 1,
8 G( W7 G c9 ]. c+ f% E .dev = {
I7 i5 @" U- ?2 r; i7 a R .platform_data = &da850_evm_tl_leds_pdata,- M* h, H. Z0 s; C
.release = led_dev_release,7 U8 E/ ]$ d l2 b/ T2 |
}* j0 w# Q/ O( F- n
};
. y }4 B% H3 x# e: [0 n
( _! V; f& T; I# _/ \static int __init led_platform_init(void)8 J9 J' r9 s" h3 c4 I _& b. `$ A
{+ o. y+ M9 c; Q3 S% c
int ret;
1 H+ L1 t; w: P#if 0 U' n; G! {4 g1 z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! W9 M4 a, }8 Z7 d& r5 m if (ret)
% n% W, P( O( }6 o6 ]8 ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 s+ f$ `! r1 R8 j8 l: H
"%d\n", ret);
. B/ _5 S' F6 M; V$ f/ \% [2 }4 F#endif
4 P7 w7 n$ U5 }' r ret = platform_device_register(&da850_evm_tl_leds_device);
' k" l2 Q* b. V5 E( Y# ~ if (ret)
5 `% `, z9 l7 S1 k; L2 V& L pr_warning("Could not register som GPIO expander LEDS");$ C. p& P G1 B: G/ P+ _
else
! M1 ?! Z- p, W6 h# J, C& m$ ?) ^ printk(KERN_INFO "LED register sucessful!\n");9 i J# k* x( o
2 V% R- F" S$ v$ X- ~ return ret;
$ z& v" |* G: N}
- A$ }. a+ A# d; d9 `: S7 h. E- m# a" l: m5 U
static void __exit led_platform_exit(void)" d0 w( c; O. f& ?
{, O* |8 q6 Z7 z( }% o1 S. D
platform_device_unregister(&da850_evm_tl_leds_device);+ o f9 @, |! S6 t0 o& Q* ]$ |& T- N
: x! w. i E/ t2 e3 L printk(KERN_INFO "LED unregister!\n");% J6 _2 K# c2 j9 z. e
}% A% [; V9 b9 K; S* j1 h+ e+ |
7 r9 s% b" z4 p" h _7 N6 P, o4 _5 _) kmodule_init(led_platform_init);' | t, M! ^3 }9 `1 o$ T! J! Z
module_exit(led_platform_exit);1 |' h- j6 n' K, y; L& V. ^
0 e! q' `" v, K9 b" nMODULE_DESCRIPTION("Led platform driver");0 y1 [ N& {; r z$ J& v
MODULE_AUTHOR("Tronlong");7 p# i& W. P, |
MODULE_LICENSE("GPL");2 a, P4 u2 E$ W2 Z) O3 v
7 \# \$ j, y7 B' Y% T" b& c
|
|