|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 \# q) _! n. W& C0 {
#include <linux/init.h>
1 w1 K& e; l, r! y. @; {2 l) ~#include <linux/module.h>* F" s8 U0 C5 o/ g4 m
#include <linux/kernel.h>
' j7 ]$ J8 q( n8 O2 V/ F#include <linux/types.h>% N: ?# \. I2 U$ L
#include <linux/gpio.h>4 w2 u% m5 o! B9 h! ^
#include <linux/leds.h>% T* T3 ~) l0 M( I0 R$ f2 ?3 ]
#include <linux/platform_device.h>
) ]1 E: b' g$ c: }. d9 E* D' Q3 T2 X- N$ j A' z
#include <asm/mach-types.h>/ ?& D* C# E B" d* F4 L) T* s+ s9 J9 d
#include <asm/mach/arch.h>
' p5 @3 h7 B- a5 D+ k#include <mach/da8xx.h>, H; ^/ E% `, l2 C- B% v& Q
#include <mach/mux.h>& @6 E* [) e. g
' o- n, g5 P$ y8 ~
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; o# H: U- y. [1 T( X7 f9 ?#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) Y. J" A: D1 D
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
L! Q" a: O. s8 G7 o1 e#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ e9 C3 M- w+ L8 x: q- ?! m) N; }
: D; @* r) q2 r+ k
/* assign the tl som board LED-GPIOs*/# p+ d; l8 b' ]2 p
static const short da850_evm_tl_user_led_pins[] = {
1 W1 y! c3 c6 R; H& ~9 f) K /* These pins are definition at <mach/mux.h> file */
, u) P. I0 w$ H DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% e( x( D6 J$ K! F: T
-1
& ^; J, r( v7 I$ O+ A/ U6 j- \5 ]};
" m0 D; b% b: q' o7 g
! L, G. |$ R' ~' o" `+ X; lstatic struct gpio_led da850_evm_tl_leds[] = {# |+ W6 |1 g7 C2 w
{2 {' G8 q8 V, _5 l ]
.active_low = 0,
& Z6 K0 y5 F, y. C .gpio = DA850_USER_LED0,
# O c% @0 c$ A& ]5 R# R# x8 o .name = "user_led0",
4 E, l, s' A) m# I .default_trigger = "default-on",
: t- n5 D$ N: g% m/ M) L5 w% ` },, ?% z( j7 P+ G! b/ r
{% t- v$ V) y3 U8 j5 p
.active_low = 0,
1 t% j/ W' w N, Q- a& e .gpio = DA850_USER_LED1,7 X) b% P. Z% F W# g
.name = "user_led1",/ D6 c' B- [. ~: u1 v' v1 x/ |! t
.default_trigger = "default-on"," h$ U8 c3 A% H9 L! H/ f' I" Q
}, H+ r8 n9 I% |8 o) I1 l/ C: H9 r
{9 z5 u( c/ _$ K0 Z" {
.active_low = 0,7 R. e# f4 A4 ?8 S2 e0 p6 H2 j
.gpio = DA850_USER_LED2,
- i1 H0 `! i* y5 T2 t .name = "user_led2",/ ^* W3 a4 E7 q7 B
.default_trigger = "default-on",. }# G+ ^& J0 o1 f9 V2 a9 L+ f4 I
},4 m- r c8 I# |- ^, c" S& U: s
{
( ]3 s% H9 Z, ]1 n4 C% V, m .active_low = 0,
! n* H1 O* h7 o% L8 W, U, N .gpio = DA850_USER_LED3,
# W) i2 `& A1 Y, J) {( m2 F .name = "user_led3",2 R, z6 f% p4 f8 C- }6 X
.default_trigger = "default-on",0 k0 ~$ e8 z6 [4 O1 q$ v
},
* Y' Z% ?; n' E2 f1 K! k};$ @9 O$ d8 }, L: g
) D& ^7 C2 U+ H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 ^2 d- k+ g4 I d2 X" O8 N5 E .leds = da850_evm_tl_leds,' O# u9 u1 N X1 `1 f: ], q2 {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 Z# l+ i/ d% }( z+ t
};( \' Z+ w5 x' i
; ^" r( m6 a! x: S- K$ B
static void led_dev_release(struct device *dev)* ]5 W3 M5 j4 w R+ x
{
: `$ L9 T- v/ B- K, y3 K};5 m; p7 j& l9 a4 E: f. G0 r+ L8 d; ?
6 q( R+ `* d/ n' nstatic struct platform_device da850_evm_tl_leds_device = {4 U8 n5 p2 h( I) K+ x+ N3 J# S
.name = "leds-gpio",
9 t* a: k- X; a% E .id = 1,
" v z) F S7 m, H .dev = {" }( V( i: ^7 X/ H8 f9 M" n
.platform_data = &da850_evm_tl_leds_pdata,
' A, O/ z1 K, B! l2 _9 g1 [ .release = led_dev_release," r' @- [- O H4 k* A+ e
}# N1 S- ?/ t0 ^, ?
};
1 ]1 G8 N+ D+ r' C
5 g* F4 l. y: @0 f) E# E) k2 Nstatic int __init led_platform_init(void)
. z* P- r' d3 i+ O2 |{
7 ]5 m& P9 s6 x: i0 k% |- V; j int ret;9 j- y: g3 Q$ \
#if 0
. y. J9 y0 v$ G ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' t, l8 {) o8 k3 o4 C3 D
if (ret)$ Y1 X* Q; X3 ~) M5 C3 ^8 W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ K4 F; Y3 g3 ^' g7 O% `6 z
"%d\n", ret);0 h& M1 s+ w, d9 r. a( i
#endif
1 U9 N$ @8 Q9 ]( R ret = platform_device_register(&da850_evm_tl_leds_device);
+ H6 U- L# p. K. \( X" M( n if (ret)
; D- k4 h6 G/ p$ _5 g' `. y$ ^7 Z pr_warning("Could not register som GPIO expander LEDS");
8 B& c: }1 F. [ else9 Q1 l& e9 q* X1 y9 m
printk(KERN_INFO "LED register sucessful!\n");- X! Q$ ^4 ?( O5 Y
" ?: X7 {: O3 b- r
return ret; W3 |9 g) C M. d7 F
}
$ z8 N3 V) q w, d# S+ t9 [
3 e- F4 r" H& t( s% m" u9 ]static void __exit led_platform_exit(void), U/ R, D4 L' T6 w% ]! `+ @) T
{8 S) c. W/ R+ ^3 W: v
platform_device_unregister(&da850_evm_tl_leds_device);
1 |4 l3 b& C: z) ?7 n& |0 d _. y" I; \( y' f9 R/ f. Q0 C% A* H
printk(KERN_INFO "LED unregister!\n");/ ~, M- Y$ O6 c; G6 C- p
}$ x9 W0 u B2 o
+ _8 M" S- r0 a) t6 ~3 n6 v
module_init(led_platform_init);
6 v) _/ O) [0 m/ |4 M6 l, q+ ~: Wmodule_exit(led_platform_exit);
& a0 s: m' f/ W5 I. ^/ d" G$ G; s# h, i+ l/ `0 l2 S
MODULE_DESCRIPTION("Led platform driver");% k/ h. g+ |3 n- u3 }* ^
MODULE_AUTHOR("Tronlong");
, u( _" _4 m2 K. k7 SMODULE_LICENSE("GPL");! a& |2 @& e: u' D& p4 e S
' [) F% f" L8 Y% g" \
|
|