|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) {4 k- l0 |. }9 S
#include <linux/init.h>
4 g" P/ c; p8 [5 {( P$ a2 Z( Z p0 i#include <linux/module.h>
& ~1 |1 i0 Q0 r6 }#include <linux/kernel.h>) }) ^5 M7 ~& r2 v0 x
#include <linux/types.h>
5 Q% x7 t( o' w1 c6 R7 i# @7 Y#include <linux/gpio.h>- z' T0 N2 E) y& ^, y- W/ e
#include <linux/leds.h> b$ y) \! t1 X! p
#include <linux/platform_device.h>& B! e. h( O) D3 l6 H, g( R0 `
' V3 W$ u& S; K4 `% y4 H" f: Z
#include <asm/mach-types.h>3 {) t/ l6 q$ _/ w9 }/ Z
#include <asm/mach/arch.h>
0 a) K3 r0 P0 S#include <mach/da8xx.h>
4 |; x# Z* t' h/ D2 I/ ^, ^- v& F* w6 s#include <mach/mux.h>
$ e8 d1 O0 P0 Z7 w1 |' e, S9 h3 t6 x" ^, G% ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) P: b7 t& L/ Z% K#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ e" {" n9 J+ `2 }5 B S9 H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); a, a K) P1 { }6 Z z8 K
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ ~, ~1 l; {* q f% U
: a8 Q h) t! K2 Z8 ~& Z# Q/* assign the tl som board LED-GPIOs*/
2 n) M$ k% T4 K, p/ g1 \. Tstatic const short da850_evm_tl_user_led_pins[] = {
+ s) l" p8 Y5 J% X/ M /* These pins are definition at <mach/mux.h> file */
2 A8 A* ]7 e/ _* I( \6 T! O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 e# F4 E9 n0 t3 N+ D -1/ O5 b! i% C% f( D; J1 r
};) T& }' h/ M6 F! Y1 t8 T* N
3 ?; \1 `3 h" `% i6 b. J4 a# lstatic struct gpio_led da850_evm_tl_leds[] = {
& |) K3 u$ I0 H, U {
F6 i# t$ }) O' G6 F8 a .active_low = 0,/ n0 Y5 O M/ |$ M
.gpio = DA850_USER_LED0,+ ]) x" B5 I0 O- S# C: r
.name = "user_led0",
1 [4 |6 `2 }4 P2 [: V0 s' |5 I .default_trigger = "default-on",& L, ?, b5 l- D9 _
},; H8 `/ r3 l- i0 q
{2 X- F. O4 t) @4 `* r
.active_low = 0,
$ W% N. ]$ G+ f+ k Z0 @ .gpio = DA850_USER_LED1,2 \( `# {1 Y, }9 }
.name = "user_led1"," [9 {7 R( y! m- J
.default_trigger = "default-on",/ o# P+ T% j+ j/ E/ @% T# z0 T
},, I2 k: q" k7 d6 \% O; U/ a
{
( g" N" w" l4 H6 @ .active_low = 0,
, C) z% P+ J9 @8 k! q .gpio = DA850_USER_LED2,8 m" w; q u) v% L
.name = "user_led2",
/ ]9 e6 e0 L: f( C$ Q .default_trigger = "default-on",
$ z! Y7 f- h# ~ },8 n" y* V2 @3 D/ { ^/ p' p
{
4 ]9 m" _6 ~3 V; ~5 L, a% ] .active_low = 0,6 k9 w5 @/ g+ A- W) a$ j) v8 b
.gpio = DA850_USER_LED3,
. q* f6 O3 D; b; ]9 f8 m .name = "user_led3",
7 C1 ~- L) _7 G4 ~3 {5 C2 B9 x .default_trigger = "default-on",
0 c1 R7 G* g3 I },
$ H' K9 f' f) |. D. Q' i3 z3 R};9 [5 E L+ |% j0 ]2 s
8 e8 b7 _8 T, K2 s; Z0 l
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- ^# |% h; t( X* o. \- J
.leds = da850_evm_tl_leds,) e7 U$ R ?; b- S- c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* }- s6 {0 a( i! ~& |}; n3 h0 G$ E& v2 w
; z1 d( t2 N4 S. O& R) U
static void led_dev_release(struct device *dev)- s. g8 ?" c& J& T7 y
{
W+ p4 j/ z6 R9 ]( G; k};
: v- d1 g. ]6 r# ` g- _7 e k' `# {8 f( F( Z0 y& e+ R
static struct platform_device da850_evm_tl_leds_device = {' C. G) m4 D* j* j. p: S
.name = "leds-gpio",, O) Y8 I4 f9 x% n( v: T
.id = 1,
1 @# L3 r- `6 o* y) |- m' D6 j .dev = {: V v. U0 b& U% n5 v% P* @1 B' }
.platform_data = &da850_evm_tl_leds_pdata,
9 f) F ~# `( c4 e! B$ x .release = led_dev_release,
$ Z/ w! R& V/ ~& o }4 @4 m8 d6 F7 w
};
8 O9 f! C& E5 M
# W8 I" Y8 C- x/ w! l; N7 \% z, l; bstatic int __init led_platform_init(void)
; b# f- F9 h, k0 s! }* P{9 ~3 p( t# E/ P6 s( H- E$ N' b% T
int ret;& F' C$ e5 j1 s; T# G v7 Q
#if 02 W; Z' k- L3 L5 r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, f8 X# S2 a! h* ^
if (ret)
# W7 F( t r; o% |5 f% X7 z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 q/ s! M! R$ v0 g' q; N6 j( G% R
"%d\n", ret);- x2 g$ p1 p! c. p- @" Y _
#endif# G) v& s% l! ?2 ]+ g
ret = platform_device_register(&da850_evm_tl_leds_device);2 k( w* @9 U6 R# g Y1 }
if (ret)% \& U, }) W/ m4 t
pr_warning("Could not register som GPIO expander LEDS");9 q! q5 n( d$ X+ | z1 o+ Y1 n
else
- e/ I) w0 P; ~0 g; ^ printk(KERN_INFO "LED register sucessful!\n");
$ o$ x U Y* J$ }6 w9 W4 B2 N1 S0 p" ?' O* c* x7 W
return ret;# I7 ?5 {8 S5 ]3 ^& e
}) }: ?+ J1 g% U
3 Y7 D1 `0 M$ J4 R. Rstatic void __exit led_platform_exit(void)
5 z0 i2 {' q4 w6 i) v{
& T6 _* B) o- g& z5 l ] platform_device_unregister(&da850_evm_tl_leds_device);- n0 G; D6 e& J. ~" B
5 _8 A" {7 f2 v, F
printk(KERN_INFO "LED unregister!\n");# B7 X' B% r& r3 o" [& Z+ h
}
/ k% o/ Y3 W! T5 Z% y2 N% G) ^9 g) R2 O7 |- @; ]: B# _
module_init(led_platform_init);* A* r0 N# t, i6 T1 x4 p
module_exit(led_platform_exit);
& U8 \ P. p2 g6 B
3 \( j& g0 T( z0 |MODULE_DESCRIPTION("Led platform driver");5 S- g3 E/ B# Q* @0 _
MODULE_AUTHOR("Tronlong");
: q9 ]/ [ Z' ?# gMODULE_LICENSE("GPL");
: F* o; |9 D" d1 o6 Y/ s! R6 \+ B1 T2 J) `" B7 Z2 c$ U
|
|