|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 ]1 N# p t: g$ |#include <linux/init.h>
* Y7 r/ i3 l6 ^& Y, j1 S#include <linux/module.h>4 M; T9 t1 M, H$ t l
#include <linux/kernel.h>
9 w" S: q6 ?2 _/ S3 @#include <linux/types.h>* D$ l( @9 F7 F
#include <linux/gpio.h>
4 q% b2 o$ j% k; [4 X% ?#include <linux/leds.h>: c9 j* K- w# h" y5 d( a j- s3 O2 [
#include <linux/platform_device.h>
5 }4 p; t; c3 m5 k- U1 ~) c
) v$ ~% O4 ^7 k' _0 @" y) j#include <asm/mach-types.h>+ Q9 G4 K& O6 f+ Y: I1 b0 m# }
#include <asm/mach/arch.h>
7 A) d' B7 ^( m: e#include <mach/da8xx.h>
$ ^$ i: S8 R+ A$ Q! ]; _#include <mach/mux.h>
9 n6 b, o9 b; S) m% K, _0 {
9 r! ?: {' ]) d+ }( h! w#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 i& H u# h6 [$ A% S" @7 E H- {#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ v7 H3 @2 H5 ]* ~3 k9 x
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) Y4 q2 P2 F% E7 _% M2 f
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; s" x3 Y# R& ^" h( N; z
2 l) j* [% M, _/* assign the tl som board LED-GPIOs*/
+ {! W1 U+ T; {' y3 jstatic const short da850_evm_tl_user_led_pins[] = {4 {% e1 A; J4 a: f: F
/* These pins are definition at <mach/mux.h> file */
1 `- n! e0 g$ a3 K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ H* h1 t# l, Y
-1
8 |% ^- F: t9 ?+ A7 y1 s$ w};0 e! y( a+ {5 q
, Z, n0 L2 J; p u+ f \static struct gpio_led da850_evm_tl_leds[] = {; B% t( P5 F- w: `, i" U
{
+ j# k/ x0 R0 ?/ b% F .active_low = 0,2 f+ y$ m# s' V0 L5 S' G
.gpio = DA850_USER_LED0,7 k* o1 m1 W9 O4 h
.name = "user_led0",
- ]) N0 t# Y, x5 Y, F: C/ s4 g4 G .default_trigger = "default-on",
* M# C% U$ I- U: M },+ B! k% N4 q% H: V
{
3 B9 \( x4 x, ^' _4 F2 p .active_low = 0,
: X0 m6 E5 R" [0 Y .gpio = DA850_USER_LED1,& \' K6 N% u; D/ ]1 `# x
.name = "user_led1",
/ [" F/ S- Z" p .default_trigger = "default-on",
7 B }; ^# H- e% J },
1 z* t. D+ \3 J6 \/ \/ z {
7 Q- C: G- k* B3 P" v" H .active_low = 0,: _" U: {& e1 Q4 l& |' f
.gpio = DA850_USER_LED2,
% L4 y( q# d, f6 K- Q6 M8 ] .name = "user_led2",
" u3 i. ~) A2 D- u' N$ r .default_trigger = "default-on",. n* P) v% d# v8 |1 ^4 Y
},
) Q2 \6 \$ Q- }3 c! k2 V {1 v7 _3 Z, ?/ K$ ?3 x' }% D
.active_low = 0,( m( y a* H, ~$ F) X1 ^
.gpio = DA850_USER_LED3,
+ R1 B7 }; s9 V2 ?2 v% L .name = "user_led3",: S& {3 o5 F% a, ~
.default_trigger = "default-on",3 J; u+ s! L6 U, ?
},7 Y( L+ Q+ s+ t* W' P
};
, l9 J; K9 k* V7 k3 k* X5 o0 b- }' }1 B0 [1 H9 }
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 Q, s$ j) e2 P2 o
.leds = da850_evm_tl_leds,2 e5 |0 V" j- ^( M: w$ R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" Q* _0 w5 S; c! K8 O8 I5 k) T};
6 S8 b! M4 ?& `, ]# R
F! g' q2 _8 n V+ k2 n* M1 a6 Lstatic void led_dev_release(struct device *dev)- }0 h' l. Y* h0 h& m
{( f1 Z% T$ V @6 C6 ^
};! H8 n ^% P7 B! U! ^6 i' [
0 e! ^- n, V. Y( k8 x' y {
static struct platform_device da850_evm_tl_leds_device = { j* |6 {2 `3 g0 t8 \# s
.name = "leds-gpio",- C& J5 t0 a& l1 Q
.id = 1,
5 E* v2 L+ B) B, K/ S4 b8 v .dev = {
! X b* `' h6 T- N7 I- p0 L .platform_data = &da850_evm_tl_leds_pdata, ~2 U$ r0 H. \+ u! R5 Q
.release = led_dev_release,/ g3 [1 [5 v' c) p4 L' f( b
}% q5 Y/ t4 L* U( B1 f6 M
};
/ I X4 S/ N; ?$ e+ E. _6 r5 y2 R& U% n' A$ A0 q2 `5 k; }
static int __init led_platform_init(void)
" `' S5 K4 p5 Z9 m# ?7 M{' R$ b$ d! p- I3 J1 c5 F
int ret;
F& k7 i r& R) c0 [4 }#if 0
6 c, c5 d1 ]1 k: X- n5 W( g ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 U7 ]' P3 }1 V6 O5 v$ {) ~/ S6 u if (ret)
/ }( |2 J" J4 \! i pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ S$ b. I% Q- [+ w
"%d\n", ret);3 A8 M6 e* v z, ]3 m
#endif
T2 u* c$ B. k: ?( l ret = platform_device_register(&da850_evm_tl_leds_device);
% N J0 l) M7 q; C. h3 d! | if (ret)4 w) ?7 o$ X& ~- E; z
pr_warning("Could not register som GPIO expander LEDS");
) M4 m( y6 J4 F; W1 E% s/ n else5 ` ]+ B1 W% { ^
printk(KERN_INFO "LED register sucessful!\n");# k* _! H% m: k) l" X3 {
: A: t# e5 c4 L; O/ n( O# C" n+ { return ret;& H4 I* U# v3 X# `, e
}2 e5 N& d( Q7 i# x
9 o. N0 Y) @1 R+ G6 k% S8 |static void __exit led_platform_exit(void)% W2 O" q1 S/ R& h- i4 c! i
{7 Z9 I! D' ~" N$ J- O1 @7 E" t
platform_device_unregister(&da850_evm_tl_leds_device);+ u, p/ s/ W( K! s; A
# G, B& Q" V. @
printk(KERN_INFO "LED unregister!\n");$ F/ f5 @) i' h) _, c2 d
}
/ b: U+ B' `0 z$ ?! v: E8 z( |/ r" {
module_init(led_platform_init);
: q8 Z- ^, X4 V8 O# omodule_exit(led_platform_exit);( Q8 D, L( w, Q/ N
: o" f" s. Y/ X# |! D( OMODULE_DESCRIPTION("Led platform driver");7 z( z$ ^' E3 a9 R
MODULE_AUTHOR("Tronlong");( n7 L P" j' \8 F5 U7 w
MODULE_LICENSE("GPL");/ w9 m; o; }' p: B
' m" T8 k/ \2 ?
|
|