|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. t& X( o% k$ E
#include <linux/init.h>
; q9 N3 \4 ~3 G% B) L#include <linux/module.h>8 v+ m; P6 D* Z
#include <linux/kernel.h>
: n3 o, p* f7 D% z#include <linux/types.h># I( Q6 ^ w1 M
#include <linux/gpio.h>4 X0 k' D5 t( L- G
#include <linux/leds.h>
4 v4 y/ C. }' Q4 y#include <linux/platform_device.h>. Q4 p2 r8 A" w7 @, C
6 }9 X' P$ i. E( q+ Z% c
#include <asm/mach-types.h>% `) ~; `0 n5 y d/ w
#include <asm/mach/arch.h>3 t3 x9 X* G3 \3 L
#include <mach/da8xx.h>, G g2 H% O& l2 [
#include <mach/mux.h>
) H0 J. n8 m7 E2 L4 @. h T x/ x; Q ]3 T( {3 p8 d! x1 n
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 M3 r- \1 x6 Y% o7 J$ q/ E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! E$ y; K) [" D% d+ {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) b' M/ B/ Q0 M" s
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 o& R0 `( B k3 y
* h6 {7 M0 z, G8 Y# @( ?/* assign the tl som board LED-GPIOs*/
( G# T6 Z; H/ bstatic const short da850_evm_tl_user_led_pins[] = {, b3 ]4 K1 E' e4 p- d9 G ]' ^) l
/* These pins are definition at <mach/mux.h> file */
% c7 G6 N. P7 U! P, W DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 w Y8 b# F; t) k+ c, s5 p
-1$ `9 ^8 p, i1 l7 A. U
};
- j+ N! s5 y4 q0 F: O
; A$ x) T0 _# T* v" u8 Pstatic struct gpio_led da850_evm_tl_leds[] = {
* t7 ~& N w/ L- l$ M* y {+ P) A5 Q9 Q0 z$ D) ~5 @. w2 H
.active_low = 0,
, M$ A T) a& E; L# H& y .gpio = DA850_USER_LED0,
o- {8 j0 Z' F* O$ R% c .name = "user_led0",
: J/ V, N. G2 P" `+ n .default_trigger = "default-on",* ^& h% i/ S0 w
},
* _3 ?* y$ T1 _# z. r4 D {9 s: H; A2 i! P' x' }
.active_low = 0,+ R8 G- g! }! v$ X. r
.gpio = DA850_USER_LED1,
5 M/ H/ }: g' ?) u; {, c .name = "user_led1",/ f. t( o" S8 K; s, H3 P
.default_trigger = "default-on",
; A+ {" \7 r6 Y d },2 D, h+ m3 E. U+ d
{! i1 M0 w$ I! q* l l+ B* @
.active_low = 0,3 q; r$ u, `1 R+ }' g, B2 D% s
.gpio = DA850_USER_LED2,2 _+ B; B; p' H3 O: a, v( [
.name = "user_led2",
2 @0 W6 {6 j4 L* `' [ .default_trigger = "default-on",
, |& S- l, h! s },
8 c5 I" S% m S- O8 w {: b# y: d+ s( H8 u1 Q* h' ~7 u% e
.active_low = 0,7 _& g- V; Z& R. s& @7 S
.gpio = DA850_USER_LED3,5 d$ R5 U% m& R m4 L
.name = "user_led3",
3 p1 R7 f! x* i! ^$ y- I9 g m2 A7 ] .default_trigger = "default-on",
- k3 G8 S2 B) h7 W( a: x },
9 \9 T3 g& G5 h2 n0 |( K& [};
. ]0 P5 U1 ?% Q y+ h9 |
* ^# V; V4 Z! ?: H8 ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& @8 P5 A2 R. Y/ |6 c6 ` .leds = da850_evm_tl_leds,
7 V) i/ y7 g. a A3 L" U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- _/ y; U- V: U7 T+ X* [
};
% ?3 k' a1 o6 g: L
) j; l5 W, O1 a% q2 j4 E6 }static void led_dev_release(struct device *dev)
- y- w8 m" D: I2 h; ~. O% s{9 u& j% i( N, {7 O
};7 S8 B2 C1 a. Y" _1 ]5 ]3 i/ t
# T8 p# m% m* g" Tstatic struct platform_device da850_evm_tl_leds_device = {
: G# X: z8 J. i, |0 A .name = "leds-gpio",2 ~ T) B# {: U& D7 W$ N. K" J t: t3 d
.id = 1,
' e! `. [: z4 ]: s: n .dev = {0 F5 T# C K* B$ P S" T
.platform_data = &da850_evm_tl_leds_pdata,+ a6 J- R* @2 ?. I" ^/ T! l
.release = led_dev_release,' }: o5 d- I/ I) _6 z, b- J. n
}
; P# |- D. ]% d* e% s};
* ?3 b: u+ f& ~* Z7 Z& {; M
3 r$ V' m6 H. \. M6 R+ e7 c6 H1 Gstatic int __init led_platform_init(void), S1 x: Z( n. o
{ ]# e$ L: f, v$ ]
int ret;
* T4 R# k1 o! w# e4 S1 z: s#if 0
* `$ Q& ?1 ]- U ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. {. t% s3 Z6 U! S# }
if (ret)1 v5 f( |6 Y* e Y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% ]6 u* d8 i R "%d\n", ret);( x+ k4 k/ h& D' n* a5 L$ W
#endif
2 \( `" k6 Q9 A3 t ret = platform_device_register(&da850_evm_tl_leds_device);: x: j& X7 S5 ?" K9 n7 ?, d
if (ret)" D4 g% k8 G" N8 X& J
pr_warning("Could not register som GPIO expander LEDS");* M" e1 Z3 c5 Q# o1 _- u
else
1 i9 `7 n) F. C% g+ B& F1 W9 l _ printk(KERN_INFO "LED register sucessful!\n");
6 v0 I d; _% F& |
' L7 F( v% {2 @5 G return ret;
! G$ R( U# q- K$ ]}7 F4 L% `. I4 a: y- E6 Z) E# r$ v
8 U* w0 p( L* n! S+ g% Vstatic void __exit led_platform_exit(void)2 D3 R; r$ q/ \0 J$ z$ m2 D
{8 H$ B2 V$ `4 B5 }* x
platform_device_unregister(&da850_evm_tl_leds_device);
g7 X* g( t( L
5 h; v: h$ b2 {6 D+ @. k; Q5 [ V printk(KERN_INFO "LED unregister!\n");
: V9 W+ B7 q0 C) b}, f- M2 G- \5 _
0 q1 u. E3 P# `$ _& umodule_init(led_platform_init);
* P' W' y2 G, c* L1 Y* Umodule_exit(led_platform_exit);3 E' `/ \; A* V3 {6 U2 j
3 c% ]0 f+ L( C
MODULE_DESCRIPTION("Led platform driver");: a8 P- F! c0 v8 w' ]: D+ x
MODULE_AUTHOR("Tronlong");
5 F3 }0 a" l P1 ]MODULE_LICENSE("GPL");% K+ T; \( g5 {6 Z
, y0 J4 C0 [' R: C$ x! v
|
|