|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 |$ e( A% @6 _+ l#include <linux/init.h>
( j! ^* F+ ^0 r#include <linux/module.h>
: o d! r) X/ ?/ r$ a+ B#include <linux/kernel.h>
9 N5 ?4 f& z# U" |- J* Y#include <linux/types.h>
/ `5 C! W* R6 K! n# B- [4 a& v& a#include <linux/gpio.h>
, V. `4 A& v/ _#include <linux/leds.h>
% T" [+ ~8 U. |4 O0 L4 ^# \( O#include <linux/platform_device.h>" w0 q" `8 s# O
+ N, ] f( d; r# x8 z
#include <asm/mach-types.h>
1 A' J/ y8 B3 J5 o#include <asm/mach/arch.h>* X r) _( k. m3 @: h4 K( i, p
#include <mach/da8xx.h>
7 w) ^. x `$ r: u; h# F/ r6 c#include <mach/mux.h>( ~. B' d I& j; U) g: u3 b
2 \. R; ~% l( W( H' {) h' W4 x
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! C8 `1 x% @# A' m& I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 ^; v0 S1 ^8 Z) o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& t1 E5 c: S, B. g0 c3 R H/ u; I. T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 ~& @6 |; w, q3 H7 I3 ~2 j/ L" m+ |3 d4 W( ~6 P
/* assign the tl som board LED-GPIOs*/7 S4 F; Y+ ~6 S2 q% y
static const short da850_evm_tl_user_led_pins[] = {) S7 D$ v" O) x/ {3 ]- [1 R; H
/* These pins are definition at <mach/mux.h> file */- } i% r! d: }; a+ L
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," a U2 w4 }* A9 b
-1& F {9 \" w" M: o5 t: g2 c
};( m% P3 O. S- `( a3 `
( H1 m) S8 M, A! Y F; e8 D8 f$ U0 l
static struct gpio_led da850_evm_tl_leds[] = {
; [- {7 C" R( C v$ a- @5 K/ ] {/ U+ C! p {$ H0 ~6 I: h$ v, \$ f
.active_low = 0,6 Z* T" v- h9 Z: \
.gpio = DA850_USER_LED0,
( S9 e9 Q# x+ O/ {( c2 m/ V .name = "user_led0",
0 }* e* m2 M4 _1 [5 }) [- H+ D+ i .default_trigger = "default-on",0 S* n- o( k6 U$ l' b
},
; L1 b5 n7 r1 Y L# T/ G& q {0 I5 h K( Z( }) A# }% d
.active_low = 0,+ s2 I+ r0 j5 y* c
.gpio = DA850_USER_LED1,
2 M+ K2 b; k5 Z, x' ^ .name = "user_led1",
% l5 j) U2 W! t) {" h! _ C- K. Z .default_trigger = "default-on",- \; ?1 L+ L$ n2 A
},
8 }0 K6 V4 f: g( L {! {- d) K- k, `+ F: W$ i. i: A
.active_low = 0,$ C0 B$ a" W* ^
.gpio = DA850_USER_LED2,( K6 m6 a( u5 p d7 u1 E
.name = "user_led2",
5 p P( I7 W% _# ~4 ~& H: L$ [0 \ .default_trigger = "default-on",; S& ?5 s0 k1 f
},
+ Z0 J+ V% ~4 V+ [ {' q9 N7 n: y7 _8 B: N
.active_low = 0,) A$ b1 U7 g' v
.gpio = DA850_USER_LED3,
6 S0 [4 V, n2 N7 I1 n3 s .name = "user_led3",
/ k) P+ U N" J9 l( E( q .default_trigger = "default-on",
" A) m* i% d/ f1 X$ Y" H5 K1 F: L },
4 d3 j+ f! i3 }8 h# k% H$ I6 b2 g};
$ e$ s+ z, B. m' y
) _% F- [6 y' d$ m! V" {( Pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; X! t/ H! O' C6 t/ y6 [* H .leds = da850_evm_tl_leds,' F7 C, a! l" j# u4 V
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ a2 q' N1 I0 F2 {2 I% Q
};
/ [- ^1 v' G E; M
$ y" ]* m7 J9 v# W; F( `static void led_dev_release(struct device *dev) \$ v @1 c- C* r" S; M H
{
$ C' I D3 V* r' Q# k};7 z4 m# c- }8 Z. F
" ~* N/ d3 I+ Z- m; Wstatic struct platform_device da850_evm_tl_leds_device = {6 x! G" b4 N* a4 \3 g
.name = "leds-gpio",
% V7 H" w) h2 c7 k' |& E .id = 1,
5 P7 K$ C' E$ ? .dev = {! T' Q0 w; i& V' M- c
.platform_data = &da850_evm_tl_leds_pdata,) h2 Z, q' x* X% X, i5 `
.release = led_dev_release,# t0 d" B' r5 ~0 U
}/ @. T" `; i& d( ?; s, B
};9 i1 ]8 F, h! w. b
, i z6 Z+ q& A: X- L
static int __init led_platform_init(void)
( [ i* d& j7 @- X% G" V{0 o/ r2 E6 n: a9 w( d
int ret;
2 S: _7 P8 S- o4 z$ v. I#if 0 q2 T+ `" X) {3 |% T, i2 t- D z2 m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; Z0 `# D* S! \( D5 C6 V9 A+ y if (ret)* m( r1 d% V3 }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; Y9 |' n( f, O J, p( w7 ^1 O+ s "%d\n", ret);
* F( ~, r3 M; j9 o& J0 c, e8 K#endif7 T7 W" Y& \5 v+ J/ c% y( W
ret = platform_device_register(&da850_evm_tl_leds_device);- ]: P2 o+ c0 J3 v8 a' j& j
if (ret)3 l* y, `& P9 |4 W5 ^' I
pr_warning("Could not register som GPIO expander LEDS");# f5 L3 y7 r- B0 Q
else3 B6 J9 k5 h+ o% L0 M6 P, _
printk(KERN_INFO "LED register sucessful!\n"); E) r/ b4 n! `# q( A( N
0 J0 W6 R0 J8 D# c' o0 q
return ret;0 u# g# Y# w! Q2 r- C; z" ~- V0 V8 u+ |
}( @; e2 Z( R$ E3 o% J# P
$ c0 J- [6 I% u8 {static void __exit led_platform_exit(void)
7 e; E: V8 p: J& v{ G- x$ V' _* Q: l8 ]7 ^' p
platform_device_unregister(&da850_evm_tl_leds_device);$ K0 I+ Q S8 I1 I' D$ v% c" p- i
; u0 i6 B& Q, f& s
printk(KERN_INFO "LED unregister!\n");
+ u" j- y6 r2 m8 f; Y}
- z9 A" U# J7 U$ d% G( L0 j# i
# u4 A: R' O' U6 D) tmodule_init(led_platform_init);
" D& G2 q1 _ w& J7 xmodule_exit(led_platform_exit);$ _* a' D( \; P' N8 i+ V+ V; |
" y1 {9 ~ G. r$ a: }MODULE_DESCRIPTION("Led platform driver");
+ W" K x: V8 wMODULE_AUTHOR("Tronlong");
( K8 O3 y, ]3 O/ gMODULE_LICENSE("GPL");* {3 V7 d: M7 X9 N2 ~) p
4 V: F" N* [. W" A |
|