|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' d3 e( M- C* \2 X: o
#include <linux/init.h>) @. q: v0 E! s% W- L8 h6 V
#include <linux/module.h>$ L C$ I# U* u8 A* e& M; f' }
#include <linux/kernel.h>
( V2 N3 j Q0 l: m#include <linux/types.h>
+ L( W: J( v* f6 L9 _#include <linux/gpio.h>
8 y/ B6 A/ c# P4 [; z2 D, a#include <linux/leds.h>
1 ~9 [% b/ A' }( l: h0 _/ \#include <linux/platform_device.h>6 z3 U* ~) J7 Y7 L: I$ v; {7 g
5 Q6 A; R8 \% Q! \#include <asm/mach-types.h>
3 I' A& y2 F# }2 i/ H5 _: k3 i% B/ J#include <asm/mach/arch.h>
- D# |, H/ k4 W3 r#include <mach/da8xx.h>
* o* r5 a" k! ?" p" P- z7 n n#include <mach/mux.h>
/ h. ~- T* m ^8 b- I
! H! C/ C- V& H6 ~7 x* n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" ^& _3 S* V2 J5 f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! b1 T, u. F! G: h* E4 O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): ]) a& _6 ]" T( S" u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 Q) H" i% k, t3 j
1 o b8 H! g& o+ y Q/* assign the tl som board LED-GPIOs*/
3 m0 R5 R* J0 [$ z- P$ nstatic const short da850_evm_tl_user_led_pins[] = {7 X) G$ ~! j& ^9 j. ]/ i$ E
/* These pins are definition at <mach/mux.h> file */( f4 P( g0 o8 P* w! {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 I2 q+ Y- O+ C+ E; M
-1( K8 m7 |( A5 a. m+ W
};5 d7 I5 Z# e7 `1 s4 w
4 @9 {& _: A# k& A5 @6 p; ~
static struct gpio_led da850_evm_tl_leds[] = {+ Q* h# g. H0 A% i2 B( I3 ^
{0 r4 A/ K1 `7 ^
.active_low = 0,
4 `* ~3 u( R& q5 D- v; W# c .gpio = DA850_USER_LED0,
' O+ g( H+ V% y/ M. N4 S' t" I .name = "user_led0",, j6 A# t9 L1 i/ M" ^' [
.default_trigger = "default-on", ~* L4 z+ r n+ G# p0 O# X
},4 ~( d5 N. R. I5 f/ B* h2 h
{
1 c5 T- m' {7 K" `3 ` ] .active_low = 0,2 Z7 h# c* c0 v+ j
.gpio = DA850_USER_LED1,
7 Q7 L, i5 ~( I- S .name = "user_led1",) y# k# Y! n" D7 ?
.default_trigger = "default-on",5 @# X2 \5 D- ]% h, P4 R# z
},
/ j2 }5 `* v+ m {6 c8 ]5 P" ]8 G1 G+ y
.active_low = 0,
$ s8 e8 [8 o* D" u z! u .gpio = DA850_USER_LED2,
) j. T# c# Q* f5 } .name = "user_led2",
" j7 ~+ E, n, s2 D( S* ] .default_trigger = "default-on",
# x; ]6 N4 T0 |# b% b2 Q5 u0 l },* F2 b* A! k2 n E! w* }
{$ ? \) O h! v- N' i1 W
.active_low = 0,
; Z& d/ G* u$ Y: C5 ]/ \ .gpio = DA850_USER_LED3,/ @9 M6 M% f8 ?6 S) \5 y
.name = "user_led3",
6 |# M q$ Z" ~8 l, e .default_trigger = "default-on",
) M( v) }, [0 a* G p: h },3 N6 r3 r: K8 r8 C6 K0 _- A# W4 k
};. Q3 n% `: [% s: p* s1 }
1 Z5 U$ K: P" w9 \
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! Z/ C: K2 W6 ~$ G; V- C! W
.leds = da850_evm_tl_leds,% d' L t4 C. R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 }& `& j& s! _/ t" t% x
};6 z+ {3 r k: C. m
; Z" Z/ w _; V, S3 [2 xstatic void led_dev_release(struct device *dev)# g: z$ q! K" o; S
{* ]$ D7 E+ a- _
};
8 C: i1 S& c w/ ^/ S
# a0 t" \! O( F. _, Y vstatic struct platform_device da850_evm_tl_leds_device = {! [: H% A$ {$ E# y j1 v+ u! K) h# `
.name = "leds-gpio",+ _# o: G* p5 S0 P
.id = 1,/ z1 {7 g' d& Y0 y, Q
.dev = {
" Y8 b: L7 j* G' Z9 ^5 a; i .platform_data = &da850_evm_tl_leds_pdata,
" R3 A0 y) i7 {- t .release = led_dev_release,
" o3 l, ~ P% j0 M$ H/ z }
% u+ n* U0 C5 \! ?};
n2 {& e2 n9 t/ H j* N. O9 Y6 n- I9 V: K) {
static int __init led_platform_init(void)
% O3 i# h5 v) {* @{( ], g+ ?- s8 x4 n* A
int ret;! o0 x0 K" t. T( |
#if 0
% Z. G7 t5 {/ v) _: i+ l$ p( r: r, k# X ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ b7 W* r9 b/ y$ p B1 H* ?
if (ret)
* W9 W3 b E {- q, a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ T- _& h+ _# B1 o( s "%d\n", ret);0 l% `+ X4 N' Z: F) z
#endif
; k( ~& `& g2 z4 ]5 p ret = platform_device_register(&da850_evm_tl_leds_device);
, v( ]0 b: z3 j if (ret)0 F- `8 ?$ d" A& U" y
pr_warning("Could not register som GPIO expander LEDS");$ Q7 z% d; Z! e. ?' T! M# T3 {
else8 _$ ^; N- c" j( u& Q% C7 D
printk(KERN_INFO "LED register sucessful!\n");
: B& O( T# G1 s+ R8 A$ f' l( I
) | ?9 O; J8 m7 l' a& [6 Y return ret;
" y b% x4 v. F0 t$ u}& @/ s! ~# a7 c$ v3 [! j
3 S; J% k% M4 a) V/ L$ e1 Sstatic void __exit led_platform_exit(void)+ x) o0 i) g' g2 M; P5 |. N
{
( J2 z0 _0 E A platform_device_unregister(&da850_evm_tl_leds_device);: G9 C5 D9 B' I% L0 W/ L- \ b! g$ H
0 q+ d: y5 M1 f/ D k5 g printk(KERN_INFO "LED unregister!\n");0 N$ Y7 C: p* g) E! h& D/ O# I4 H3 p
}
: o. n' O* L8 g& `; s4 m+ X( e/ }
# `, s' T u& ?module_init(led_platform_init);
2 v% S! Y' T$ }module_exit(led_platform_exit);
) s# s+ ^* b( h) G. X6 F F! i" C' _% Y; z% o
MODULE_DESCRIPTION("Led platform driver");
: B" x# a6 Z3 i. j' a5 W1 PMODULE_AUTHOR("Tronlong");
( c' G9 m+ x9 s7 r" ^1 g6 ZMODULE_LICENSE("GPL");
$ U |+ {/ C7 h' \% s5 X: v: F$ f5 \2 T' [
|
|