|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" v5 j( Q$ C+ {! A5 Q#include <linux/init.h>, ]& Y9 i" W* X/ _, \/ J
#include <linux/module.h>
; I0 e( o) r* y6 o( X$ W$ j% E#include <linux/kernel.h>
3 ?, n! K' p+ f* k#include <linux/types.h>0 g: A% x: ?4 p! E1 O
#include <linux/gpio.h>
" g( [" C' [6 W7 `4 ~#include <linux/leds.h>: y$ C5 z& m& `
#include <linux/platform_device.h>
, a9 U3 Q6 Z1 i
3 t5 o+ y* Q9 H% P* {( b#include <asm/mach-types.h>" H! K8 g8 c& r
#include <asm/mach/arch.h>
% o+ i4 q3 h. _, b+ B4 _#include <mach/da8xx.h>
8 G3 a% f5 l: B) ~. l% ~% d* s#include <mach/mux.h>9 Y W/ i6 g3 y
. n. } {$ \' ~7 `
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 g# I6 _( V* q# p- N: b V5 b#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' o2 Z. c' F+ _* l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 ~' i$ m) U5 v; h X, ?, Y9 S1 V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ F+ K& j: K* V) n: B Y
) j* D7 @8 D/ \: f; N" f* o/* assign the tl som board LED-GPIOs*/ n8 X! v6 `* f3 e! A% |# N
static const short da850_evm_tl_user_led_pins[] = {3 @, A6 H( \7 U( G% S9 \9 `$ G
/* These pins are definition at <mach/mux.h> file */' ?: k1 |9 ? C# I- e! g* r
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- Z! S! r* h: k0 B: J! x' F# [+ \
-1
! w* d% c& Y t9 n; u" J/ M& ?};: a7 I/ a' A; i; v. [
* X2 E4 l3 b& O- }/ ^1 ]static struct gpio_led da850_evm_tl_leds[] = {- y. o5 ]* c0 v3 }
{; L2 v# q' G% I: i# z/ q0 X) f
.active_low = 0,
" p0 M/ e+ {3 Y4 H! b4 @ .gpio = DA850_USER_LED0,- z+ t( l y+ \8 s
.name = "user_led0",
5 t* c7 l+ a6 R, O, P% I# B1 I8 W .default_trigger = "default-on",
# ^6 x4 M' h4 W: B' f6 h },; x. P/ e% v& q7 \' _
{6 E% W; P' s5 h/ X1 N, V/ }1 L" M
.active_low = 0,
6 s: V7 Q: X3 Z$ m& \ .gpio = DA850_USER_LED1,3 M; X) R5 i/ u, `6 K' N- e0 `
.name = "user_led1",/ Z4 r9 `4 K( U4 y3 N1 J! z. ?+ ^
.default_trigger = "default-on",
4 T, J2 K$ h# w8 M( r% ?' m" D# n }, j0 p3 a! H8 _% H$ b1 ~
{4 _) F, R* b: \( o+ D* q5 ?
.active_low = 0,& F. O4 c1 u1 C2 i! x& }
.gpio = DA850_USER_LED2,
$ @+ h2 ?/ ^ j) [' A4 }7 @, R .name = "user_led2",' t; o5 {, p1 z0 k/ I0 _4 x! j
.default_trigger = "default-on",
1 F7 [* n" z$ l/ y },# o# J. H# ]# Z+ v
{) L5 k i5 f! |& b
.active_low = 0,
, K2 C; h5 f6 H1 w .gpio = DA850_USER_LED3, O5 w: z- A$ M: d9 C* x9 D p
.name = "user_led3",4 n2 B7 G( c& x6 y2 y+ Z5 @2 e4 f
.default_trigger = "default-on",
h% ^4 y% U. e: o },
0 }0 J" l, u) s, ?, k};2 `4 J$ {, N: ^+ j- @
9 [: k0 j2 v+ Q. p+ k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& ~/ z1 J5 `& ]/ w8 d' B A
.leds = da850_evm_tl_leds,
' F7 U8 ? y u1 _: g) _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 o, p+ n7 T" Z, W6 l};7 c7 i4 ?: N, h% |3 B
7 S9 U3 d9 Y" }. A5 ~* r$ e! C8 @
static void led_dev_release(struct device *dev)1 H" |, @" X4 j% e3 s
{% D1 \. N, Z5 m' e
};
9 V7 G6 J3 j2 Z! w) F0 g7 {2 h1 e8 H6 C2 g! p1 u9 j
static struct platform_device da850_evm_tl_leds_device = {; J6 k+ ~5 t; }9 E& J4 s0 H) s3 X' N
.name = "leds-gpio",
" o, n/ h; E$ X5 f6 F .id = 1,3 G! \7 u( K! l9 r1 Y- [7 Y
.dev = {
9 H9 i, `7 l+ \# @' s7 A .platform_data = &da850_evm_tl_leds_pdata,
. x/ z, A) i$ Y: J' E2 O .release = led_dev_release,) ]( g& Q1 m/ A, \% }
}
$ i) c. k. J5 ?& A4 R};
2 |+ s+ v9 M7 s( d8 ^, k+ Z0 A( ?" Q# u/ y3 G% X: j0 ]
static int __init led_platform_init(void) |% M4 a' ?0 C2 j P" [$ {3 B
{
- d- B9 J8 t8 D5 V5 j int ret;5 g: G6 O* v& ~- d
#if 0
3 R* l- D! L3 H/ z* X" w. l' ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& A# f4 b6 c8 A) T+ l* S+ o
if (ret) r; I- k! z+ j' n& @- Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 T6 I, o( D- m "%d\n", ret);8 O4 e) |7 o& U$ z
#endif
6 u, L0 D! J" O# |# a" F9 e% p ret = platform_device_register(&da850_evm_tl_leds_device);% I6 v1 C2 u, B! x, p7 l% g! c$ d
if (ret)" k( A# G# d7 E+ g& _' X* ]
pr_warning("Could not register som GPIO expander LEDS");
$ m0 H+ y! {9 \4 U, X5 F/ n else
! G( f; ^ p; p1 L3 [ printk(KERN_INFO "LED register sucessful!\n");
$ I3 B2 C; f% V4 t+ \0 b- Q$ s3 p7 z o Y
return ret;
1 Y( A0 [) a( Q( a- P5 r}
8 C9 Y) e# T- Z2 i% P4 u8 f7 E9 h, ~) {6 l; ~
static void __exit led_platform_exit(void)9 P6 \% x( I( \* o1 V9 O
{
; Y; T* C4 [1 Y2 W+ B4 _4 t9 v platform_device_unregister(&da850_evm_tl_leds_device);
+ [3 ~5 N6 j K) v( J! E
$ }! V A2 {- `2 v! F printk(KERN_INFO "LED unregister!\n");
S7 s7 K: D7 |) x) F+ `}
# e' _1 F# ]8 j# M3 ^
0 L. G& e" M1 L$ xmodule_init(led_platform_init);
3 l1 n. I5 L: ~1 U$ v/ o; imodule_exit(led_platform_exit);
! H0 M7 u, l8 I+ S0 H8 v
y2 u0 }9 k0 G! _6 H2 `; PMODULE_DESCRIPTION("Led platform driver");- u! p! u& [- q' v1 l, `8 C
MODULE_AUTHOR("Tronlong");
4 U1 T, Y; i; H, s# H& MMODULE_LICENSE("GPL");
4 i) c' B+ c: Q2 G5 P' s1 _. s+ k9 I& s
|
|