|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 e& ^; c: K4 q$ s4 l( k. e
#include <linux/init.h>- w; G# Q9 Z q( q2 s6 B( C
#include <linux/module.h>
4 b h5 D$ h* @- N. P: ?#include <linux/kernel.h>
( y6 Q6 d. E& N#include <linux/types.h>
. K$ {/ L8 r% i# E#include <linux/gpio.h>9 E, t% h# v; G( C1 b+ L6 a' e
#include <linux/leds.h>
7 j! F, U8 ^" B! R+ z#include <linux/platform_device.h>
0 @1 E3 w% c# E! b" F" @, N. s' q# m" k8 z$ f2 A+ n% E
#include <asm/mach-types.h>. V# ^0 A3 f0 V' f* R
#include <asm/mach/arch.h>
( h" ^ Z" w, M: O) o0 V#include <mach/da8xx.h>
" V/ a1 ^- P6 [1 ?& ]' U#include <mach/mux.h>- k4 F2 K5 k# {1 F' ~& P4 j
4 k$ v4 U$ l+ }7 A8 a: O+ J8 a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% k( e' G4 x6 W$ U* I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( t0 a. q: m! L+ |$ A- W" z, ]
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 H) U) H6 h9 y( w. W( s2 e#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 r* ?0 d# w* p" G5 F$ _2 C/ w5 \9 G% r7 x: m
/* assign the tl som board LED-GPIOs*/
3 R0 R2 A3 k( M+ q# ~9 q" [static const short da850_evm_tl_user_led_pins[] = {
+ C' p- `* w+ |4 q /* These pins are definition at <mach/mux.h> file */. s0 V3 E% G7 c. L3 S
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 {5 u8 U! T8 S$ l" N
-12 u! v8 ~: D! s8 O
};
. u2 @6 j9 v" o1 f* ^
0 J* \; o5 Y. Y& u- n$ bstatic struct gpio_led da850_evm_tl_leds[] = {5 ^& {" E: U. b
{( b5 p; Y1 o. }5 [2 W. a
.active_low = 0,
2 D b N+ e9 }, p& z g: f .gpio = DA850_USER_LED0,
S& p- ~$ H8 e4 O .name = "user_led0",$ \6 F2 I& Q& U
.default_trigger = "default-on",; ^2 X: V! R! ]4 I- J0 ~3 B
},. o! P w$ i$ O/ t% F+ I* K: J
{
1 s! a/ v9 U7 i5 c0 w .active_low = 0,
7 ?. L$ d% g7 A7 L .gpio = DA850_USER_LED1,
- g$ M! G- \0 I8 h: u- _ .name = "user_led1",
5 q0 [/ U- j% x1 @" k! ? .default_trigger = "default-on",
& a/ I, A! T/ F' C1 `6 B },( t I. `/ q+ |
{. w7 t3 e2 v" N2 M+ } p) f
.active_low = 0,
, M3 y( C5 O2 n7 s .gpio = DA850_USER_LED2,
3 Q9 ]* [. S* _ .name = "user_led2",
8 N# c+ o$ Y( c/ _/ z, E' s .default_trigger = "default-on",
8 V4 ]7 P7 x/ c5 v, I2 k6 v },- R2 q+ S4 T1 F) J9 r2 f2 X8 f
{
' l6 o0 ?8 c7 C) w .active_low = 0,
" J; b2 q4 J( A4 L: m" T .gpio = DA850_USER_LED3,
j# X# t% E) n! y .name = "user_led3",
0 x& G7 o8 C, [4 \3 C" D .default_trigger = "default-on",
- |0 h b6 Y* ^2 q" K9 y1 y },9 f4 p. K& F$ f# O+ W
};$ _+ y& ]# a! p* L! i* d1 H: l5 @
; T$ {1 i5 w0 w" H S8 [# Z( Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ a& ~$ p8 F4 `
.leds = da850_evm_tl_leds,
7 O5 T6 X. h( p# ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& K0 o6 c$ e' D2 F6 I: p7 I};
9 d3 A' v' J! d; W" f, Q; A, j; _. ~/ N
static void led_dev_release(struct device *dev), r$ x+ G$ ]% q/ e; e9 x) s
{& J" d: G& [( K0 g1 P! Q
};- u& H% B0 _4 s9 l4 L3 q6 R: `
, \! s3 D2 b! A# lstatic struct platform_device da850_evm_tl_leds_device = {2 e; F! z- Y# m$ @
.name = "leds-gpio",/ b) I* q2 \4 j, X% w/ D
.id = 1,4 T; [, E3 b% _( B: I- i
.dev = {
: L6 g1 u2 d3 _$ @6 }$ D& E! D .platform_data = &da850_evm_tl_leds_pdata,3 K2 o/ _+ J3 A" A- ?
.release = led_dev_release,
L. S/ \$ q, u }
, K% o: b1 i) O" r};
9 {" x' C2 `4 H m/ ]
' ^* F; |$ `, W _2 ?. }2 e6 H( Ystatic int __init led_platform_init(void). E, _; |6 P$ j: g( i" U
{( u* F6 }( J8 y
int ret;) g" f- q% f; l! y
#if 0
( q' ?8 |7 P6 f- r) c ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: V6 P6 z" ~& }1 L if (ret)5 v0 h/ V2 z! W- T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! Y# J! U% s3 N) N) I( u H
"%d\n", ret);
# }: K. \: T" H2 ^' {0 G5 |#endif% k: L6 V: S# n r' b" M
ret = platform_device_register(&da850_evm_tl_leds_device);
" ?. l$ ^0 ?' }3 m0 v+ Q if (ret)( i% _; @" M/ y8 e6 P
pr_warning("Could not register som GPIO expander LEDS");
& _8 }0 }' q1 f3 a" s/ a# v else
8 H* L% @$ u- a* S printk(KERN_INFO "LED register sucessful!\n");' O2 Q2 K0 O7 k1 d# a p h
$ D9 f4 H" v2 O+ r; [2 z9 H* {6 t return ret;% M: A7 P7 B }& }5 s+ A8 T- P3 X
}! ]& _5 c1 o3 \% F
1 p9 S+ L- O0 H" N: astatic void __exit led_platform_exit(void)
" ~9 A: r/ R( b- U4 ^{
9 ]& b2 W1 z! G! E$ A. z6 s7 v3 I platform_device_unregister(&da850_evm_tl_leds_device);
! N ^7 ?) h( N% H7 Q. j/ U/ `) r b
printk(KERN_INFO "LED unregister!\n");4 s- P2 a+ M+ } ~/ x' l, r
}$ v+ P1 M8 N% i
2 j0 k2 ^ y9 O( wmodule_init(led_platform_init);( X6 u. x" u1 I8 I8 s F
module_exit(led_platform_exit);
: f% M; I8 P9 F5 s9 D, q$ J3 P& I- ?& _' x
MODULE_DESCRIPTION("Led platform driver");
( X; Y- [( Q# s h& ^1 j* P7 L, G" ~MODULE_AUTHOR("Tronlong");) ?, W% B; t; J9 ~+ K# v
MODULE_LICENSE("GPL");
" v) o n4 y! N
# y8 M: x r7 I& Y |
|