|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& g* q* Z; k$ @! n5 Z K
#include <linux/init.h>
+ Z+ V- M ^2 I# H1 h#include <linux/module.h>; W+ w- q: L3 U+ {! D5 |9 K* E
#include <linux/kernel.h>. ~/ ], `0 ~. v- U6 x% s, U
#include <linux/types.h>
2 G1 Z* K) ?* [0 m1 R#include <linux/gpio.h>8 ` [9 b V: q; ]$ C
#include <linux/leds.h>' ]. |2 H7 ]; x: G7 F
#include <linux/platform_device.h>3 G' c$ w$ a% n1 g% p4 |
& w) `9 W* ^# j0 j8 g#include <asm/mach-types.h>
" \( X6 E9 O3 X: a' q3 S#include <asm/mach/arch.h>
_4 h9 H- x$ l4 J7 X0 F1 G#include <mach/da8xx.h>
1 D' L6 o. n# l3 z' i#include <mach/mux.h>
& Z9 O5 h$ e s8 [3 S+ J& ~% E- V( v5 T L1 z$ `) H# y$ z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: d+ w. E# p: S; \9 z% [ R3 Y$ v, B#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 e0 C2 p0 d) p
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! g0 u6 K4 ? {, Y4 m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 z% X0 {' v8 [$ p' k' |; P( X
6 W" i4 I7 ^- L3 }) ?1 R
/* assign the tl som board LED-GPIOs*/
- f: l* H8 c, P7 [# M# x+ lstatic const short da850_evm_tl_user_led_pins[] = {
8 I5 f; H4 F4 ~ /* These pins are definition at <mach/mux.h> file */
; i# O* Y9 l9 d# \ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# U4 A- [* I" I5 C+ U( j
-1
& @: A1 t) x, j! H) N% I};! t0 q7 r4 ?6 r7 i$ W+ ?8 }, Q
8 B8 }# ~- Y& v% | h! o9 h. P E
static struct gpio_led da850_evm_tl_leds[] = {$ h+ w8 m' d6 [
{) y- O& O/ X K$ I: G* E
.active_low = 0,) z" P2 ?' v, Q2 ~/ l
.gpio = DA850_USER_LED0,
" u% N Z: c; K9 B$ ?: p7 u .name = "user_led0",
0 r, \/ \. m- ] .default_trigger = "default-on",2 c4 q) I0 O! u0 E3 q2 ^
},: d2 ~: z6 `7 U& x2 g
{, h+ h# `' [$ |& [0 j+ I5 X' U
.active_low = 0,6 O+ i/ Z* ?0 m$ R3 F- g
.gpio = DA850_USER_LED1,- `: A. o( i3 {9 b
.name = "user_led1",
4 R! K0 a; X a .default_trigger = "default-on",
1 l8 Q- z9 V3 X$ [ },
7 u1 u' G" [' C) p& C" [; @ {
% l. Y, ^6 L! P ^8 P .active_low = 0,1 K7 M. d( z+ N+ R& M
.gpio = DA850_USER_LED2,
# P, C$ Z7 Y- ]' |3 s+ ?; E+ t8 w3 s .name = "user_led2",
: S& y( S, N: o3 \2 Q# A .default_trigger = "default-on",; w1 X' u! Z3 R4 ^ C
},
+ f* B, c( b2 b {7 V2 {5 p" }1 U7 C0 C: R
.active_low = 0, u! |9 K5 ~$ ^3 }) }
.gpio = DA850_USER_LED3,
( z8 w5 G; y& c .name = "user_led3",
# j9 _: W3 N' `2 z& E: r- @+ w .default_trigger = "default-on",& c* Z+ j0 R5 Y' ?3 C
},% O* d( _& f5 [) z
};: X' w }) p a2 U9 H% T) Q2 p
9 F6 U, N6 i5 h1 I. B2 q X! @+ z: jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% t1 ^$ N. g% V; |4 \
.leds = da850_evm_tl_leds,
, g7 E# b1 R% E) q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. _* Q& y6 v& ~' [};
$ M: d8 D1 H0 D! |, E- ]! e
/ R$ w: Q6 Z* rstatic void led_dev_release(struct device *dev)
/ t. O9 q. l/ e( U; H' m{
5 [) [4 J! Q# ^};
) r0 r, Y8 z9 L3 Z2 a1 |' y$ {" x) M
static struct platform_device da850_evm_tl_leds_device = {$ x1 H+ ^/ f. X/ f4 x2 n/ G) p
.name = "leds-gpio",% g2 S* I, L6 G3 u8 V
.id = 1,
* k! g+ q! c3 U1 j .dev = {4 J( G, {4 v5 m0 \5 Z( B- v
.platform_data = &da850_evm_tl_leds_pdata,0 S( ^# V7 b$ L0 {4 x* }" c! C
.release = led_dev_release,2 M5 ]0 I) w1 N/ r7 e) i
}, I1 F2 D: C- V6 {
};) Q: ~/ j& M7 w: g5 [$ Z
# Y0 G4 t5 ^9 {; O
static int __init led_platform_init(void), X6 D* l/ q2 x! q# p* }, l
{" }3 I! H8 z9 C, h9 C8 F% J o
int ret;
; {( X% C$ t* u#if 0' W1 @: T" |) L, ^, g. H( {( W! W6 F" A
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ ~ r) k" {, L6 A4 _& i- Z if (ret)
8 W/ z, F( L$ A# G& @: T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 w( O+ ^& E2 i$ [0 c. w7 U "%d\n", ret);
2 O! N+ k! z" {; F#endif
* W1 o* x% t+ V ret = platform_device_register(&da850_evm_tl_leds_device);5 _* V7 M; [ R, x* X
if (ret)/ U ~$ ]7 r& Q: o, G& F: ~
pr_warning("Could not register som GPIO expander LEDS");
, N% h% [8 S* z/ Y; h else! D8 w7 k' ]5 u5 D! q/ R5 J
printk(KERN_INFO "LED register sucessful!\n");
2 O; b1 w: P) q; O7 S4 e* ^- a+ W
return ret;
. F3 B- B T( F! z}
" }' o2 p8 |' a5 v2 m0 ^5 H0 K. g0 \+ E. M! |; e
static void __exit led_platform_exit(void)# F; A: G' d* N
{4 @4 ^3 W3 L1 {- N/ o
platform_device_unregister(&da850_evm_tl_leds_device);
5 n" `. Q# P1 |
& n% D# G( h1 D( b) I' @& H( e# e printk(KERN_INFO "LED unregister!\n");! i+ A& V' Z8 u/ z4 l% c* V) A
}
1 u' c* {/ u( V. d8 m+ _6 {' h1 a( {1 t/ e) F* y$ P
module_init(led_platform_init);( h/ |$ @3 V* q) }& B( n1 O
module_exit(led_platform_exit);, [/ x! N5 k t) u
" _; L( ^' |/ p, I
MODULE_DESCRIPTION("Led platform driver");( y2 z# Y: f- _ a% e h
MODULE_AUTHOR("Tronlong");, @. D: I9 X) _
MODULE_LICENSE("GPL");: q9 H& z$ Y2 @8 E
* ^$ E' c T) p( U0 K
|
|