|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! C. O/ h) ^' ? c: }/ Q" U
#include <linux/init.h>
7 M$ R- ^. {; {+ }. y' _#include <linux/module.h>; Q7 n# C; ^% t; t
#include <linux/kernel.h>6 r/ m+ i% |3 P/ d
#include <linux/types.h>
/ J) \6 l) N- k3 l1 D#include <linux/gpio.h>. {$ q/ @$ h7 U2 P# R& L
#include <linux/leds.h>
, N* |5 g2 V7 a" Q#include <linux/platform_device.h>, n, R# L4 D2 U8 n0 ^
, b, P0 w$ B) o% ]" G9 f/ p
#include <asm/mach-types.h>
9 R: ^5 z2 y, o7 g6 K4 d# |3 S#include <asm/mach/arch.h>5 i* g1 U% t& N- _
#include <mach/da8xx.h>
) g Z1 U# B. B2 {- c( D, b1 {' B#include <mach/mux.h>
1 v& n9 e- h3 a7 z
1 u: S1 V2 c6 K/ d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* Z4 [5 b; |% f. Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ Z. w# F& Z8 ^' M8 K+ z# ^& F, H
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 g% e6 E1 t1 o# \
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& {, b. l- P+ w8 d9 j
5 l0 [* q$ l$ `+ W* r9 l8 i/* assign the tl som board LED-GPIOs*/
% w/ p) o9 ?7 E+ `+ Bstatic const short da850_evm_tl_user_led_pins[] = {
, Y- t5 K" e3 g T /* These pins are definition at <mach/mux.h> file */% T6 I/ R4 c* ]2 S$ P0 M" `! J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 _9 x1 H" G: L" z' _
-10 [" C% ]( } B4 O
};1 X \/ C; v, n- v- G5 K
- C( [5 E' n! {- T$ z
static struct gpio_led da850_evm_tl_leds[] = {1 ]- ~2 L0 H: x: e i! d: g
{
7 a7 j& G; X8 q% S- H .active_low = 0,! r% P* x7 m: b6 e2 e( j) ?
.gpio = DA850_USER_LED0,
3 x$ R$ V( y. _# @# [$ ^ .name = "user_led0",
4 B! ^1 W# O* c" D .default_trigger = "default-on",
. v% w* u, x8 ]8 g) o* M& ?1 j3 F },0 r7 w" j" D9 d# K
{! u* U2 J* i6 I) u, G& t2 b
.active_low = 0,
5 [7 X+ L- [( R3 m' H( u k .gpio = DA850_USER_LED1,
+ N% S% a" L, l0 u .name = "user_led1",7 \* W( y& R1 z Q5 \. ]4 f
.default_trigger = "default-on",
6 t/ G! N) T8 |3 @) P$ ~% L },
$ Z- G$ ]2 t& [; ? {' e% @0 C) E8 b) m0 J* ]
.active_low = 0,
) g1 p8 Q" p% {1 z. ]' h H .gpio = DA850_USER_LED2,
' \4 X, t: P" \- ^ .name = "user_led2",
- Z1 D- m( P7 C# `1 ` .default_trigger = "default-on",
9 g" \( a( a/ \! D' b8 B },2 C: o! `4 P) m6 \
{& H3 \, i7 ?2 K: |4 Z! |: }
.active_low = 0,1 O% [$ ]# V8 d% e! [
.gpio = DA850_USER_LED3, X0 b6 C/ s7 r) Q' I
.name = "user_led3",' V) d' G9 @; E8 D- h, H+ v* ~
.default_trigger = "default-on",
- [* @8 v+ S1 \8 p4 K: l6 e },
: `2 p3 l. ]# z' H1 W}; Q$ R \- N8 ]" O
- n: {. L5 n3 D5 _) H( O8 Kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 b- w* W" a) S .leds = da850_evm_tl_leds,
, y' w i) v2 c ^' t5 J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 _& X, [5 }2 ^- q6 S
};
s) p# d; O; \! {# j9 M; `
& O9 X9 l, X( w' Jstatic void led_dev_release(struct device *dev)9 O, W% u# w) }7 q. u' {) M7 \
{; o1 A. j: E* v* H" O
};0 K# }6 X9 r7 M5 T* ~
" _" f* Z8 W$ j4 A
static struct platform_device da850_evm_tl_leds_device = {$ w+ {- |7 E- d/ P
.name = "leds-gpio",. b8 H3 W$ R5 C6 d9 g+ G5 \2 e7 B
.id = 1,
( X3 j2 ?- D. ~ p: y) d. c% } .dev = {3 O. d- `9 W' j8 f$ [( j4 e
.platform_data = &da850_evm_tl_leds_pdata,
1 i |. N1 k- K! T .release = led_dev_release,
) h0 G" Z1 x) l8 z* ]. R& @ }, h6 k2 }/ A2 b* |- x
};1 M( P }- s3 l9 B% K1 C* T6 m
: x. {/ ~1 E- c
static int __init led_platform_init(void)
0 D, i7 E( M! }{% i7 T6 |7 O) s7 d& H
int ret;9 [' Q2 Q# V0 b7 w1 b* }5 M
#if 0
0 r. J0 m- K# X- {9 { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' b: U( Z! T- e if (ret)% m& Z* |6 K2 k6 f) ^7 l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 }, Y& F6 e: {$ n; o4 v V
"%d\n", ret);) Z" a( S6 Y9 D- v) |( j
#endif
, s% b3 a2 U! Y ret = platform_device_register(&da850_evm_tl_leds_device);
* a! ^3 }& u$ x1 {# b8 v& ] if (ret)/ t4 v+ N& y' g* I0 e% T
pr_warning("Could not register som GPIO expander LEDS");
0 r/ `1 | _: F$ y$ t. Q else
6 \7 L5 U g+ [ printk(KERN_INFO "LED register sucessful!\n");9 N% i3 Y( S: _! q% w; I
' r$ Q5 F7 u( c3 z4 d; l1 I3 I return ret;! X1 r5 t2 ?: m' a
}
# b6 M* I! g# ]8 A* G7 K; [
4 A' Y6 U" r B! S+ v* ~8 Kstatic void __exit led_platform_exit(void)' Q0 H, ]9 ^+ J4 @
{2 n0 w* {4 ?5 n/ F6 g
platform_device_unregister(&da850_evm_tl_leds_device);
2 i) W4 [5 I+ A0 u [8 j1 `, j- [" T0 c8 `4 H5 u# S# u8 C
printk(KERN_INFO "LED unregister!\n");
: C: V- b& e; @! }}
! I; t4 I0 s' z% L- b+ x& O( E
( v; Q. I+ W" M0 jmodule_init(led_platform_init);0 {8 t, ]) b; M! T( t5 w0 C5 H2 B- V! ?
module_exit(led_platform_exit);- u5 G5 O3 [9 U; Y
$ p0 Z" p# G6 a0 m' I/ E6 SMODULE_DESCRIPTION("Led platform driver");& g' }" j- a: r- `+ _
MODULE_AUTHOR("Tronlong");
/ P) t5 ~7 e7 a9 P6 eMODULE_LICENSE("GPL");
`2 H' M, T0 k% }5 X
) X) G: u; U2 F9 B* _ |
|