|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ D7 k4 ^+ G( f) L/ B5 ]
#include <linux/init.h>
5 C4 B3 |6 m1 ?& f#include <linux/module.h>2 c! |: Q3 n# a4 z) c
#include <linux/kernel.h>! ~0 C! B2 X8 \% R9 p; c5 x3 F
#include <linux/types.h>
- J0 Y/ r/ c& t. K( P9 c#include <linux/gpio.h> \1 Z: ?; }$ M' H# H; D: W
#include <linux/leds.h>2 p0 P/ v; i2 v2 M' t+ V9 y9 n% @
#include <linux/platform_device.h>; K8 E& f$ e2 E
. W9 C# ~* a9 o! A: [' Q( u! g) U2 _
#include <asm/mach-types.h> q1 f% x0 d+ c3 S
#include <asm/mach/arch.h>
4 v$ M" X" U1 p4 D5 C) ~#include <mach/da8xx.h>/ H9 J' Q8 \9 t" S
#include <mach/mux.h>7 F# a* z; Q' @7 r5 I
+ E, i6 F% c7 |/ B. ]8 u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), ^ O2 ~& c! |# _) H
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 i; ?6 r* e* d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" ^7 v% e4 H& l8 L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# ^6 r% `( c' y3 O+ @. q* R
( b. d' c4 {4 Z7 u
/* assign the tl som board LED-GPIOs*/
. o0 F3 }7 R% p# Kstatic const short da850_evm_tl_user_led_pins[] = {
2 ?# }9 ^3 C" _4 G3 ^2 m7 w+ | /* These pins are definition at <mach/mux.h> file */2 x3 N6 W* W0 c4 l3 p$ y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' ^9 {+ G7 w% i: ?" Y
-1
3 O; e5 t4 l" I+ J- f7 E1 i( ]' ], c};3 b1 E' b: `% t1 |
2 R+ Z4 @7 u1 bstatic struct gpio_led da850_evm_tl_leds[] = {
& @: [" G X2 ^/ z# {5 H {& X" h% M) H5 d, Q
.active_low = 0,9 Q) r6 q+ x+ U |, K( r4 Z' X1 \0 ?
.gpio = DA850_USER_LED0,
0 t. G7 O5 Z$ X3 J; Y/ z* _0 M .name = "user_led0",6 F1 h( U* |: }, {' T. I" p7 n2 O; _
.default_trigger = "default-on",
- N! z7 |5 o& G9 w! Z1 I8 l( T },5 c9 S9 d( L2 F& y: ~9 ?
{
0 i' y3 i- q: K9 { .active_low = 0,
) A# u& A O& c* Y .gpio = DA850_USER_LED1,
) h- ^+ R4 F& D5 a. {6 x .name = "user_led1",
6 S4 d' E8 M0 `" `5 J+ r& Z Q+ d- a .default_trigger = "default-on",
+ c- ]1 x# d Q" V' Q- Q% I },. m6 s( G4 O5 `
{3 Q4 f4 R+ @& C
.active_low = 0,
: M! z6 \$ Q# W5 c .gpio = DA850_USER_LED2,
- ^. }7 R- N4 ~$ G# F) W .name = "user_led2",( O& ?. X7 {! l1 J* I. u3 w
.default_trigger = "default-on",
. u( [+ x- p r b6 U: L1 L$ r s+ q },2 ?) }! v/ {- A" B( W5 i( r! v5 k
{
1 H7 _+ B; i* h0 m" q# k' L4 j: u% u .active_low = 0,$ K1 P4 T4 q. ^0 p% m& K
.gpio = DA850_USER_LED3,1 [/ g# s9 d8 t5 s# Y# v
.name = "user_led3",8 h) [. {% N; Z* s8 L* w3 I
.default_trigger = "default-on",0 ^8 m k! B9 H' N$ f7 u
},
6 W% j( Q6 M% `+ f};
; M5 [/ @+ V/ C1 |3 a2 j3 z7 c: s. y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! r* U- x7 g6 u4 O' ^! k .leds = da850_evm_tl_leds,
, y3 e) g" ^! u0 _: F( O .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- W" K- X$ s+ b% Z( z, i: x
};
5 c+ Z' j+ ^7 m& h$ ~* H. K6 G. L5 {# y* w
static void led_dev_release(struct device *dev)
V0 F# l+ l+ X/ ^% p{) _5 b. h& R- b
};6 v$ O( H% J9 z
; M/ `5 X# ], H! g8 p; e7 ]0 y
static struct platform_device da850_evm_tl_leds_device = {
& y( M' ^3 [! e; t: f1 { .name = "leds-gpio",
3 Q, h9 ~1 Z6 [7 W% e/ q( P .id = 1,- j) t+ `) a5 r, v: I$ H
.dev = {3 J; v3 F' G; t
.platform_data = &da850_evm_tl_leds_pdata,
# V8 Z# N/ k4 T" m" ?! ~8 u' Z .release = led_dev_release,* i2 O+ ?8 c: @* V4 q
}0 G5 A8 \2 }. W- n
};# ?$ U4 \/ f5 Z! X r- t% [
) R: Z0 L# j; r" e) Kstatic int __init led_platform_init(void)
& f5 E0 o e! |* Z4 G* P/ l4 L{8 |/ G3 P/ y' t. i5 F7 K
int ret;
% v: V) t3 i# {! ~3 U6 [#if 03 H8 A1 d; N7 l% `4 Z, Y9 g) n) P
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" R* r3 L- i% @' a& `: g+ V& q
if (ret)
* h. i0 C+ M4 Q* ~2 g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 H; @+ \, G% ?& I3 J7 @ "%d\n", ret);
5 v% b6 j0 A, g- C# C8 h( I#endif
. h4 p1 g. W! m, z+ h0 O ret = platform_device_register(&da850_evm_tl_leds_device);! C5 w# ^0 v% I7 A6 _% C& }
if (ret)
* U$ a8 P" I+ s$ C pr_warning("Could not register som GPIO expander LEDS");2 ~. _+ ~' `4 J2 O
else
+ f9 [2 _2 u7 q1 ?3 d printk(KERN_INFO "LED register sucessful!\n");4 s+ |) I. _; ~6 V" K7 x& m
8 `6 L- l( `1 Z- x; O4 B( [
return ret;
0 l" v2 k0 y8 h}
3 `' y ~% g o: }* v8 b* G5 c' j M1 Q( h- W
static void __exit led_platform_exit(void)
: o6 \4 t F f, t- C{
0 k. ^( z4 Z h( S- p4 I8 L platform_device_unregister(&da850_evm_tl_leds_device);8 G9 Y% q) J2 G1 G
0 g( p2 P z m+ M5 Q7 t& E, t$ E
printk(KERN_INFO "LED unregister!\n");
( M% h( d! c3 M1 U}
% U& [: t- t- Z+ ]1 V8 Q2 r- \6 I; N( d3 |. O9 Q0 j
module_init(led_platform_init);3 X( h+ A& S$ k& t
module_exit(led_platform_exit);
' w! B, k: u' R
6 K* l- K5 o: L8 d& `/ KMODULE_DESCRIPTION("Led platform driver");7 J0 r" [& W$ l
MODULE_AUTHOR("Tronlong");
, P7 \3 ^5 b+ ]! M! mMODULE_LICENSE("GPL");
& l& d s1 Y: O' C/ S; C7 Z* ]: q2 X4 P- p+ u4 b
|
|