|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 k- ~& D, @$ I: Z- Y5 X
#include <linux/init.h>
+ j0 ?7 Q8 j. G/ E. N9 U#include <linux/module.h>+ C6 p, `/ u: o0 t
#include <linux/kernel.h> A* Z$ ^' Q! \6 T2 ^
#include <linux/types.h>9 V! W$ D* u0 J$ _. }
#include <linux/gpio.h>
4 h1 Q4 a+ `. |; z$ i2 y#include <linux/leds.h>
% c' V- W& d3 S% V) y# i' B9 A#include <linux/platform_device.h>
& s+ V3 G1 Q2 N. q3 Y1 a
6 P* I8 x" L8 P, |. `: T0 r#include <asm/mach-types.h> h- i/ G3 X7 v8 L
#include <asm/mach/arch.h>
5 {4 ~; L% o6 Q#include <mach/da8xx.h>8 k% J$ w5 x8 u2 n+ j' d- ]
#include <mach/mux.h>
( T. U4 j+ F }6 D) F
2 c$ l9 B2 {8 T) a* G#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ M) R- ~6 I5 T! ?$ y- v#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 M2 q D9 `1 ]$ p8 H- q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% w/ k) {$ Z ? M; i5 R( j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) s- b8 ]+ M6 G, ?
' w# _/ q& |8 M! A
/* assign the tl som board LED-GPIOs*/
\9 q( O/ B2 w% m2 \- `/ T, nstatic const short da850_evm_tl_user_led_pins[] = {+ \: V3 V% B' a; x7 G; A
/* These pins are definition at <mach/mux.h> file */
/ M! x$ s- \, B5 t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, Q; [: I' T7 t2 j0 E: w+ L
-1
/ h5 h7 P' L$ _) d};, m( M4 f8 Y: W1 _# L2 s
! {- O- @( c3 pstatic struct gpio_led da850_evm_tl_leds[] = {
- ?+ H. o9 K& Q0 v# B {% [ G6 s% ]) v- P6 D" Y! F
.active_low = 0," h' \% I- o. O2 T9 J& M; G c2 ?
.gpio = DA850_USER_LED0,
7 }. E4 v! u' V$ S1 w2 [! k .name = "user_led0",- t! Z! A) C% v5 H
.default_trigger = "default-on",0 H" k6 }- U8 x( r
},* q2 ]# k" X3 W7 K0 x* | S
{% c8 S* Q6 d& f% _9 g6 g
.active_low = 0,- l( n4 z! r: h1 p8 L
.gpio = DA850_USER_LED1,
; E/ h" J4 O) C .name = "user_led1",' g% h5 _ N% H3 i, _ R
.default_trigger = "default-on",- v4 n: y0 z$ e, c2 O
},2 w9 I- l, s @# u1 j% H0 @6 y
{
9 r9 B3 [5 L0 L9 I/ }; X .active_low = 0,
( W5 X9 V8 \8 ?8 T8 I9 B" r .gpio = DA850_USER_LED2,
3 h( H! T" w8 c .name = "user_led2",
5 h0 m e1 O& @5 q/ b/ h( F8 x .default_trigger = "default-on",# V4 \: N7 v) _# ?) {. Q5 E
},, {6 a! B: U0 e' q6 y- U
{ H3 b: w9 V6 p
.active_low = 0,4 M1 Q+ K9 H; n
.gpio = DA850_USER_LED3,
8 A. c. V' s4 t# M' N .name = "user_led3",0 V8 _6 [$ k9 h* q3 w% ^$ N0 P+ z
.default_trigger = "default-on",. h1 {! y5 g1 e
},( u. [ I. m7 z$ p \ m
};" k# [+ u2 a& c `7 o8 q4 K
9 b" x' F" e; n. L& u8 l
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 l; d' ? Q1 E1 f- n2 l- L# W
.leds = da850_evm_tl_leds,+ @7 W2 k! E/ a9 p' z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 h7 B7 A8 z" g- W
};) `1 k! v& X9 `" \6 G: ?
+ Z% u0 j6 v3 ]3 o6 T Kstatic void led_dev_release(struct device *dev)
3 v! o+ T* S* l; _: o{
) q" O) d0 c2 B1 C \* Q1 t7 E};
+ m! ~% c3 B" \& W" o1 i; w# S; o
static struct platform_device da850_evm_tl_leds_device = {7 S2 V9 z5 T( c2 b5 H% P
.name = "leds-gpio",# p2 o. `! h" R6 v! R
.id = 1,6 } ^- Q3 l! S/ y- \2 U* `( U2 |
.dev = {
6 {/ K' ]+ d" Z; n8 k1 k; D .platform_data = &da850_evm_tl_leds_pdata,1 Q5 H: R A+ O. S
.release = led_dev_release,
/ c' ?, I- A0 `' x+ Q7 ] } ^' {! C/ b8 g) e* B$ U9 s5 a0 j
};! a" f8 o! A& S- C
. B# ?$ S) Z: y
static int __init led_platform_init(void)& {' c$ P7 n. n2 N, L, I8 p
{* E- x) s V7 m
int ret;
8 N. e+ ~7 p+ J7 A$ R( z. s#if 0
$ A/ x+ R' n+ U7 D/ G ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 N; a( m+ V4 \2 X3 j' ? if (ret)
+ s* E5 t, ^1 i4 |; U$ a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 @" l/ X3 {! ?( |' L- M- Z
"%d\n", ret);
. n5 D# G; j! |$ [8 M; O#endif! R+ e9 _% F# _; d
ret = platform_device_register(&da850_evm_tl_leds_device);5 K0 K% ^9 G) v" `+ K1 W: |
if (ret)' j4 i* {. d! P
pr_warning("Could not register som GPIO expander LEDS");
" i9 {, x- U" h! r0 U1 Z( K else% l1 b& s/ s9 n A$ B2 w
printk(KERN_INFO "LED register sucessful!\n");
8 S# [' b* I- P' s: w! K6 l6 x/ g8 A$ j4 S4 G
return ret;
) `; o( d$ N' u0 z}' p1 f+ b6 [7 o# W' d1 o' Z! Y
+ I9 n; W# z" D/ s+ bstatic void __exit led_platform_exit(void)% Y4 [. z" }! E! j
{8 A9 _7 e- r: ^/ D
platform_device_unregister(&da850_evm_tl_leds_device);, [2 n( j- g* I9 U
0 I( Y) v4 L, F ?' R; I printk(KERN_INFO "LED unregister!\n");
3 k* u, m6 F, f1 v}
! g4 O6 k2 F) Z# a1 d+ R
: A- a: \& l& j& G+ w! G: `) C- Tmodule_init(led_platform_init);
* Z, P% F/ r5 Q# i5 I2 Y3 l! G: V# g) bmodule_exit(led_platform_exit);9 L' @9 Q3 I. F. }' u+ K+ A
/ L4 k) {6 g, P( u: vMODULE_DESCRIPTION("Led platform driver");
, c; e% H! [0 r8 T4 D- E! `: K8 |MODULE_AUTHOR("Tronlong");- |7 T% Q& d! n$ h
MODULE_LICENSE("GPL");
r" t+ L* k" P6 _" @
" @8 d4 m) e. U: l" w$ R J |
|