|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 H: a& N- m; W. Z9 R# D$ x#include <linux/init.h>2 ]- y- s/ Y6 k$ N' A
#include <linux/module.h>) l& l* X8 T' b. X
#include <linux/kernel.h>) t. f8 }! {& x0 r9 z y) _
#include <linux/types.h>
3 `8 g' T5 H( e3 h: U( X#include <linux/gpio.h>
1 k8 o- m3 N7 ?8 {0 V#include <linux/leds.h>7 i* G& A5 m' M6 k
#include <linux/platform_device.h>4 J7 O& ^3 U" r1 m
$ [2 M& b! p# a* v
#include <asm/mach-types.h>6 m! E* t4 P4 B. ]; M& p4 b
#include <asm/mach/arch.h>
) L' g4 ]- G- M) {* q9 @#include <mach/da8xx.h>8 i _5 F* q0 `1 s* f' b6 m
#include <mach/mux.h>
o* B; J6 S( I5 X
* N7 B/ P5 v" r% N# n, {/ ~#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# T$ A' D/ k4 F( J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 }% I2 [( n, J) ^3 D" s. r3 L
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 t) j# g$ I, j" K: D8 F9 y; h8 W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ {6 K; Z1 R2 q2 u) g0 N/ B! A
, I' z& R4 }+ Q! H# C$ v* e* b/* assign the tl som board LED-GPIOs*/
0 t' w! b/ N) D% @static const short da850_evm_tl_user_led_pins[] = {* z5 a) o) o4 I* R
/* These pins are definition at <mach/mux.h> file */
+ ]( z0 X M, p9 i DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% E/ R* i" ]/ @" a# o
-1
" D5 F0 S/ H# o' d# @, k2 W; A! G};) [8 t; e0 q- Y
& s' S+ o, i! y! d8 \: h
static struct gpio_led da850_evm_tl_leds[] = {- A+ [8 W# l1 o' R r$ l: d4 ^, t. f
{" d, d: a. `1 h" X0 q
.active_low = 0,& u+ I6 k4 _/ @+ R$ Z: j: m6 d# K9 T
.gpio = DA850_USER_LED0,: h2 w! |' X: g7 O1 ~* N
.name = "user_led0",
% G4 c9 N. V0 |9 U6 A4 N .default_trigger = "default-on",4 Z9 U6 g$ e4 H& s( u) G
},
- G- \$ y3 m1 A! L. N {
" o( o6 c1 Y M0 f* I a X+ x5 t .active_low = 0,0 Y- a* {: A9 e/ s$ @1 R c; S
.gpio = DA850_USER_LED1,0 [$ m8 s0 A* p' d0 Z
.name = "user_led1",
+ Y; y# B1 `3 m, u% g1 I .default_trigger = "default-on",
, k. r, f4 l# G3 a/ B* C8 V },
$ G/ N4 }& D. \3 P4 U3 m {: R0 x3 h! M. a% d% Y
.active_low = 0,
1 g" W, r' G" y0 Y' O# {& g& U# f% M .gpio = DA850_USER_LED2,; I* @5 i$ S, n7 S9 p( d
.name = "user_led2",1 ?0 B* @* Z! e& L: q7 A' i* w
.default_trigger = "default-on",
6 r9 H, q3 g- t' m },! K% {. |$ m4 _$ _ b2 K8 C
{8 ]0 n; S6 [* {& f
.active_low = 0,1 d0 i( ?: d+ ^. @9 r
.gpio = DA850_USER_LED3," \0 k1 f( i3 T- N8 M* N; `. G' [
.name = "user_led3",
8 h9 D3 e# d8 b! t- _! @ .default_trigger = "default-on",
4 B7 y Y1 ~, `! X* c/ l1 w, A! d. b- R },
3 o: ]: B4 N9 d7 C" |+ n5 w/ Y! M}; [0 d2 W. s( t: r
; C. z v- h3 X# T3 E. e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, W/ w" s7 P0 x5 b .leds = da850_evm_tl_leds,8 ]3 q# g0 ]0 L+ ]! X' V0 I T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 R8 H# B7 G4 \) Z- K% r};
7 ?3 _ l* ?* N: @& o% |$ V/ U" e2 w; k1 M
static void led_dev_release(struct device *dev)
$ `( t+ H) F2 _. K{
7 @, C f$ b6 e7 a( P};
3 }5 `7 L% _1 f m- Z2 F# c7 @1 ]% I$ q" h
static struct platform_device da850_evm_tl_leds_device = {+ `, m/ U; ^: M2 J; ?5 f
.name = "leds-gpio",/ |* [9 E* P9 ~* e: B
.id = 1,
0 {5 y ~: V8 \5 G1 z9 z- r+ I4 m .dev = {
! C; |4 ^4 z/ z2 w) a/ c .platform_data = &da850_evm_tl_leds_pdata,, ]! F: a7 ]$ F
.release = led_dev_release,) p+ g) X! n6 y& J. e
}
+ |. Z% E3 ]1 S};
9 [- R: s( e0 N
; T, i6 I6 o/ x2 r/ Z8 S+ l! tstatic int __init led_platform_init(void)0 S; T1 z" L1 H8 @" E' e6 w
{8 }2 g+ A3 e7 {; M9 D
int ret;
! Y" V8 y+ p$ w. K#if 0
2 i" J; M( t: F) E8 x4 E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( [, \. H) G8 Y$ d if (ret)
8 m1 L# Z9 |" q. C& M pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 Z/ ` M& v4 w: o9 h
"%d\n", ret);. A2 w4 g0 {( D$ d
#endif# j0 V j$ C9 b& H& B1 m& X
ret = platform_device_register(&da850_evm_tl_leds_device);
1 }; z/ V5 h+ N! c8 d% B if (ret)( {: S/ B4 ^, _- {/ z
pr_warning("Could not register som GPIO expander LEDS");/ }5 k V! J, i1 a+ e
else
, c% } C& f5 \* Q) a# E3 }$ x3 g printk(KERN_INFO "LED register sucessful!\n");# g, x# h! K7 I8 h* X& R; f
& A5 G& ]$ @6 M h! j# b
return ret;
+ f% V: E! ~* P- D9 X$ S}8 t$ ^- V5 s1 f: n/ {9 T0 O3 |
0 h' W3 t3 {. v/ b. [! _8 l( sstatic void __exit led_platform_exit(void)4 G/ }6 E9 Y. m- g e
{
: J; p' }( @* c1 F1 ~6 y platform_device_unregister(&da850_evm_tl_leds_device);
+ {+ U/ B7 U: u) k
+ \& Z1 E$ Y0 E4 x) P% L+ D printk(KERN_INFO "LED unregister!\n");- r" p$ | B& j" B: _2 F
}% r% s* Y) o& {( \+ S* P2 J |
8 x* M7 t, j; m" j+ C9 h8 v! E
module_init(led_platform_init);
9 ]& a3 P1 t) V' I) Vmodule_exit(led_platform_exit);
2 l# h4 M" |8 R; h; ?( S s! H
0 \7 {1 p' w! c) A0 _/ y _" sMODULE_DESCRIPTION("Led platform driver");
- O. p# N7 `9 w, X# MMODULE_AUTHOR("Tronlong");& q# ]" v8 o, `, m( o4 C1 o
MODULE_LICENSE("GPL");% R* I& k5 e% g \
/ F3 \, c) n* r0 w; N/ q |
|