|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, H% m/ p7 M4 t. n9 C, y
#include <linux/init.h>
. O, a5 }- l" S z: m#include <linux/module.h>5 _' K5 E- n7 `7 \1 U# y O
#include <linux/kernel.h>
4 X% {; k) U: {: e" {5 O) r( b. O#include <linux/types.h>+ S- I: a) ~% V# b+ M4 ~( C
#include <linux/gpio.h>$ z; x8 b8 B' ~# C, o1 Q
#include <linux/leds.h>, [9 x/ \2 k# E0 Y8 e, U
#include <linux/platform_device.h>
2 `' w; y# q' ` ]" ]: q5 r& C: T' D2 l* j+ T% }4 m; K% C
#include <asm/mach-types.h>7 \$ k6 S% F) t% D ~
#include <asm/mach/arch.h>
( Z8 Y; K% ]6 g6 C& M5 |#include <mach/da8xx.h>
7 _+ u% v3 n$ F% w, J: G1 ~, O' \#include <mach/mux.h>4 R/ v1 b9 R7 j+ h4 x
! D* H" a# ^3 \8 M4 ^7 s#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 I- S7 o& I" P, h% W#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 a6 }! w. `$ H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" r7 i7 n1 @0 q- N6 G* V( W#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 _& I- r a6 h' ] G9 M* {( J9 _9 c( m U# i
/* assign the tl som board LED-GPIOs*/
) }9 P# Y/ V8 }5 }6 O$ _' Ystatic const short da850_evm_tl_user_led_pins[] = {8 k+ k! z7 Z! ^3 _! ?# Y) B5 o) |
/* These pins are definition at <mach/mux.h> file */3 X( Q' |3 e7 {8 \8 X
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ m" N$ K& D# o c- t8 _$ {
-1
2 A! N$ P+ | k+ l/ P! p, e};! v1 |8 M5 g' V
" ]! v- m' S# B' r
static struct gpio_led da850_evm_tl_leds[] = {& m2 D$ X9 k2 L1 ~
{" H$ m& b/ C$ E; h
.active_low = 0,
/ m1 {1 ?" ?* ^; B; j' G .gpio = DA850_USER_LED0,
/ n' m9 f3 U7 r: p- T .name = "user_led0",$ z# E! \7 d& y5 X
.default_trigger = "default-on",! j& F% m$ w' ]
},
( Q9 F, f: F' M& h! x. g/ w# s: N5 F {
$ `. S1 ?1 y( R, H: x: z .active_low = 0,
6 C9 [& N. A& V& u; n; t .gpio = DA850_USER_LED1,
" Q& _* O4 A- X/ q .name = "user_led1",7 x, [4 n' ~- |# ^) M
.default_trigger = "default-on",
! F9 }0 F% |( Q; A7 f6 x2 @& @ },
, g! D6 B, U! y3 g" G. c {
4 Q2 Q& h) \! ]. h+ ] .active_low = 0,5 ~3 B5 p6 ^/ C* J- V
.gpio = DA850_USER_LED2,
7 n4 Q# u) S6 ~7 W, n9 w .name = "user_led2",! f) l8 Q% \& Y4 P$ a2 D
.default_trigger = "default-on",
2 q# l! \/ ^0 G T },$ P- \' v: _$ n2 b. Z% L
{
6 d1 S- l+ k5 a$ @9 i8 Z .active_low = 0,
/ N H- |! ]7 H/ h' A3 d3 ` .gpio = DA850_USER_LED3,
3 Z+ `* T, h6 M8 D0 l4 [% g9 ` .name = "user_led3",
6 I4 X% X; ?# k .default_trigger = "default-on",
j9 q* k7 {" r% \! p4 n2 } },
; N: a T* z, m* K};' K- K, I% C- A. T# C
7 h9 d! n1 e1 U; p- ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 ?4 b8 H. \' P9 E1 l
.leds = da850_evm_tl_leds,5 l1 J% D: b! v4 h) U
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( a# E1 Q& N) m7 f1 R- w, j};
2 K1 S+ \+ z# H V9 M* G- `) I- f- I- }$ ^/ |
static void led_dev_release(struct device *dev)
0 l5 Z9 a9 `7 B{. P" u: r' J) W) ? K! r
};0 z, s1 }3 X4 W& B' n
" F8 ]4 f3 P1 Z; |+ E2 _! a
static struct platform_device da850_evm_tl_leds_device = {
( L1 ?1 i% i5 ^& |/ {+ \ .name = "leds-gpio",
; M9 n& P( O4 i, @8 a/ _' q, W .id = 1,* ^* O/ Y8 l8 L* R
.dev = {
' m2 U I: f* S+ Z0 I. F! O .platform_data = &da850_evm_tl_leds_pdata,/ H# q1 v! w8 _7 j9 a
.release = led_dev_release," d b% S1 T' i* ^, e7 o7 ?
}5 d6 m0 K/ C5 t3 ]+ J5 t# R _
};
7 `/ Q8 H& |& s' X: L# ] o* y5 V6 e
static int __init led_platform_init(void)& _- h9 S( m& W& Y2 B
{& i L3 p. |8 P( i# N9 \
int ret;- {, h8 ` Q2 c- ^
#if 0! `( W4 l- S! @+ _% {4 t$ ~% i0 j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" a1 Q, ]+ m M2 S0 \, X6 ?% V if (ret), n5 n: {. R+ v6 D* c# R! Z J, u0 ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' d: b- Z' \9 I# t "%d\n", ret);
( G5 l) J4 a. H+ a& O9 `+ b#endif/ k0 v/ j8 z* Y4 ?, n
ret = platform_device_register(&da850_evm_tl_leds_device);6 E* s9 b+ E( x1 D ^7 W% Q
if (ret)
. K2 |( m1 F9 F7 A pr_warning("Could not register som GPIO expander LEDS");
- l8 d- t' H/ r/ U9 F else0 N9 S) X3 P9 y/ G
printk(KERN_INFO "LED register sucessful!\n");" `- p! x' |0 x; t% x
1 p7 i6 t$ X, n& K& i' a
return ret;
) `/ W& r" x: b' x}0 F* V2 N% f" f. L1 h1 }, _+ W
" ^' z7 y/ C' F% V" R7 `: ?& N/ n4 W
static void __exit led_platform_exit(void)
4 Y% _1 Y$ r5 }9 [9 ~9 Z# N5 X{
. W0 h: S- H2 z; d6 O platform_device_unregister(&da850_evm_tl_leds_device);
4 D5 u5 c3 Q: _1 s/ O# `2 n6 }* R8 M9 R j9 q, V3 Y
printk(KERN_INFO "LED unregister!\n");
! R. s8 u0 v3 ]0 ^5 E} m4 }/ ^( v) i9 L
3 ?* N9 ? @0 Jmodule_init(led_platform_init);$ I1 A2 |5 X# l7 l
module_exit(led_platform_exit);3 {9 {3 Z8 u4 \. }( @" ?
( z& I% U! l2 l3 b$ Z2 b
MODULE_DESCRIPTION("Led platform driver");9 ~9 b, s& l: h# v+ u/ K+ B6 k
MODULE_AUTHOR("Tronlong");
' u$ @" N: f2 q& T# J* b) `MODULE_LICENSE("GPL");* B/ C, B# {, v# g" \- P
6 @0 z7 W5 ~/ @' q3 k4 B5 T3 Z( D# q |
|