|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: e1 r0 W7 B) _! K. F& s#include <linux/init.h>! v' W6 P T' d6 y& O% E
#include <linux/module.h>0 G0 H8 T" m/ ~1 F! e; X. Y
#include <linux/kernel.h>
6 h* p% w: q: Z8 Q6 j# z#include <linux/types.h>: S% N- c6 S! `4 k
#include <linux/gpio.h>
8 y0 X1 s& r3 z; _#include <linux/leds.h>, r$ [7 ^( ^$ C0 H
#include <linux/platform_device.h>
; H; D9 H$ `8 F5 ?0 ?# e/ r$ V: _7 P! m
#include <asm/mach-types.h>
- S5 @3 y% W1 Q8 u#include <asm/mach/arch.h>
0 _# |: P: \ H' q6 s# v4 ~#include <mach/da8xx.h>
- n) P) |0 Z, j# C. |- g/ Z#include <mach/mux.h>
% E. p; @$ S+ i$ E
! s# N8 `4 R, l5 q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 Z" e A' S: W6 r& r" [( N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* _0 k3 C5 M" a7 @) `% f$ Z a& N1 X
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 }: A) u! D& t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ o1 Y0 _! O$ V+ R. l
/ z1 {+ \# q4 h1 l/* assign the tl som board LED-GPIOs*/: X; @8 M% e" [! C; I! r g
static const short da850_evm_tl_user_led_pins[] = {+ c4 A ?' o1 ~* W
/* These pins are definition at <mach/mux.h> file */
0 G5 T; Q0 Q7 C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' w7 ]6 _# g& B
-1
3 }9 d3 t2 |% H# Z# R3 k! o* |" P};9 ], M1 v5 g: w% I- P3 c0 q- M
: ^4 x# P# A; ?: G. q2 ^& H% _
static struct gpio_led da850_evm_tl_leds[] = {6 ]1 [) Q) J) D2 N. k) w
{
. _; W/ n( E1 t; i .active_low = 0,; V- J2 a! z8 ^" |6 G, q$ s
.gpio = DA850_USER_LED0,
8 N! U' S- t G. _8 n .name = "user_led0",
* N7 a. b, k$ w& H) D! |! X .default_trigger = "default-on",. K% T. T/ o! ?1 ~) b
},
' j7 U$ }8 `, ^% @; W7 w {
/ t& g+ |: q8 T3 D .active_low = 0,/ v) j% X4 Y8 z
.gpio = DA850_USER_LED1,2 G$ i& { a+ l5 l. L" I- x
.name = "user_led1",
. ~( O* M% m, ^& Y5 Y .default_trigger = "default-on",
) a: f6 D, M! D& H" q },
0 m8 H8 k t1 z" X! g4 D1 G {
* L. s2 @9 G$ _/ J4 X& a( w( h7 K .active_low = 0,! O; G# q: E0 Y" m$ s
.gpio = DA850_USER_LED2,
; L, x) I. l7 M! _" g .name = "user_led2",( X% i3 N. o2 X' {
.default_trigger = "default-on", M! a c) X7 p/ v o
},0 o6 {0 q A3 i5 N/ v
{3 T Y1 i7 U" ^% g/ V/ g8 Z( Q! _
.active_low = 0,
" n) L6 |1 C" @4 ^ A2 |; j .gpio = DA850_USER_LED3,0 G' q; k, M8 F: p
.name = "user_led3",
3 n3 \, t0 j) ~' \- m .default_trigger = "default-on",
* L: U0 m' \' {: z+ O# n },
+ y7 V! y4 e8 v& L8 J};/ N! h2 v7 |' w$ g
) x/ g6 A' r: e0 O% m2 vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ @/ ^3 \3 a Y E' R
.leds = da850_evm_tl_leds,0 G. z. k8 O- J* B/ V
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ K, s) N* ]% V' u, Y( D) R
};6 N: E6 }9 `* o, y+ |& u
/ m3 p0 L, M1 d" \" J; n
static void led_dev_release(struct device *dev)- |& z+ |: S k6 x! ~
{
8 s& g" s p6 u$ @2 [1 h};% x/ h! e# n+ y3 H* E) k
6 h' \+ U2 {; X' a8 l( @, estatic struct platform_device da850_evm_tl_leds_device = {
2 Y' M2 X# ?! D' ]6 Q" y7 c# w .name = "leds-gpio",
- A9 O, Q' p0 ~9 i .id = 1,* ?/ H' c. q, k8 C
.dev = {$ t+ a, S& K2 d( |0 Z9 k
.platform_data = &da850_evm_tl_leds_pdata,
. j; p i- y$ o .release = led_dev_release,) S2 p% `9 p* K: b4 G; J9 g, y& L h/ O) y
}/ D6 A" ]$ ]. q% w- ?
};
( w9 P7 J. N6 ?: v, `4 u3 o* b, c7 w6 e6 h, z( Q3 Q8 l* m% J
static int __init led_platform_init(void)
8 W7 v8 v3 P& L7 P: m9 u* @{0 P1 F% E9 L% O7 ^8 u
int ret;6 s9 z3 Y) f' x/ M& H& q
#if 01 N$ W9 Y& P- J% Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 O2 n/ t# K5 B; V4 m if (ret)
( C( d) }7 [5 r, ~8 t5 [ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 U8 T+ [( c2 B5 J9 ]/ j "%d\n", ret);- F* ?" `0 r# b Q+ C( `6 G, V! M3 ~
#endif; G$ {7 k1 X, s% A4 N* z4 y
ret = platform_device_register(&da850_evm_tl_leds_device);7 P4 A$ C) J( y" x
if (ret)
2 p& P- F; d" d9 | pr_warning("Could not register som GPIO expander LEDS");
& P5 R* D( \" D8 L8 N0 x' Y3 k V, T* A9 u else
2 }( l, Q7 R1 A- y5 c9 i printk(KERN_INFO "LED register sucessful!\n");+ Q) j" s) H; I+ S4 c3 L. `
% `) E I/ T% X7 u: C1 U0 s
return ret;" {6 ~( G3 d& m: O* k
}/ ~9 V3 n, l- A' r2 e% S2 q
# Q, [$ Q C! S5 t! g1 ~; ustatic void __exit led_platform_exit(void)
: Y: a0 W' Y( c: s{
( Y: v( j, F" O& Q( @( N platform_device_unregister(&da850_evm_tl_leds_device);/ ~, N( n3 i7 C z/ o' V6 w
4 g i: o! b$ g! @* v% J! q
printk(KERN_INFO "LED unregister!\n");# T) d! _) ? u" E8 k. h, {& x
}: A' D* V+ k# x4 b6 M! s, n, D' _
0 I: ?8 s! S" }/ r! T% T/ @# F
module_init(led_platform_init);
1 g7 h/ t6 x0 X9 p3 gmodule_exit(led_platform_exit);6 K! Y, r0 T# e* @* H
) i; e, @# V: y& h; ~6 |MODULE_DESCRIPTION("Led platform driver");9 s3 [, o& E7 @% @, k
MODULE_AUTHOR("Tronlong");6 O! K. D! p- n! r/ q; X
MODULE_LICENSE("GPL");
8 P6 f K/ I! t( Q% n1 U! b9 R7 t/ Q
|
|