|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) x, Y; b1 f/ P a- k' u
#include <linux/init.h>
: l8 j' k3 I# B#include <linux/module.h>1 b# ?8 Z4 ^, o
#include <linux/kernel.h>
2 F. m. E8 I0 r7 ]+ \4 b' t% \#include <linux/types.h>2 R$ V! K5 M, u X: |8 B
#include <linux/gpio.h>
8 d' B, F9 u5 F6 N#include <linux/leds.h>
t5 D" t( _' Q# |, I#include <linux/platform_device.h>5 _- S6 L" F; Y' }
0 C8 K- F" A% }$ f/ s. q q% \
#include <asm/mach-types.h>
5 n9 t8 V6 y" {( M#include <asm/mach/arch.h>
! i5 L. q7 P2 ]% n( Q' O+ o#include <mach/da8xx.h>; D* y% B0 {% s3 E/ t
#include <mach/mux.h>
( q+ J5 S6 B7 P8 f8 B7 q- M7 [" G+ E- E, e
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) p$ k$ Z5 ]3 C% j5 ]
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# ^; w. I( |9 g- _$ b#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" f/ x, o x5 ]# I/ B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' i5 u+ v/ B' J6 |& v
9 H- A7 |' M" l
/* assign the tl som board LED-GPIOs*/9 U$ ]3 N/ P- M m" S$ t
static const short da850_evm_tl_user_led_pins[] = {: V l) g' ^# A8 |
/* These pins are definition at <mach/mux.h> file */# T: U) T$ u% T W1 R, S/ C, O, s' f
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' P' R( b- k2 G$ M6 C
-1* R2 Y- K/ {3 D4 t# X. w; G
};2 G$ X0 X6 ?/ H" w/ N) Q
2 @& T9 U, J: T9 g$ h
static struct gpio_led da850_evm_tl_leds[] = {# X2 H1 l C- j" n `/ ]. u- s- q, `
{
: d. J& G# G1 D |* C .active_low = 0,6 A3 _4 y* U; v! Z) G+ @! y4 K
.gpio = DA850_USER_LED0,
M0 {7 I1 T' V& M# U8 b .name = "user_led0",6 ? b" q0 Y4 @. `
.default_trigger = "default-on",
( L3 ^% b3 m" y; d' w },& c1 ~/ P5 @% c' O! P
{
+ q; d6 Y7 o) v7 k- f) D .active_low = 0,* N4 W; U* H \1 X# c" l+ v2 J" U
.gpio = DA850_USER_LED1,
; p" K7 X; R9 ^$ {) Q .name = "user_led1",
( H* I; T+ i( | x/ r3 a) j: j .default_trigger = "default-on",$ q @( \* w0 e' b
},$ l" d1 \" ]/ m* O6 O2 G) u6 h
{
7 X4 C+ o3 B, i5 P .active_low = 0,
& D) o2 v/ p+ y4 G .gpio = DA850_USER_LED2,
$ y1 l0 {% `* T! {" ~" [$ Z' ~ .name = "user_led2",
2 A1 j6 Y2 ` `) P; f1 _ .default_trigger = "default-on",6 w( W6 D$ G7 ?( _. y
},
6 F8 D5 m, }- T& z {
7 T6 e2 _2 c+ K2 ~ .active_low = 0,0 U% q' w; r2 s' E* G2 ]. S
.gpio = DA850_USER_LED3,5 d1 F2 k+ W) E! R5 M* k3 G
.name = "user_led3",6 A. E/ K$ U' [5 W' M) z) ~9 S) J+ K& a
.default_trigger = "default-on",
! l0 T' Q: d7 _+ J },( j9 D$ o$ ~) j) j
};4 n# y+ @$ \1 \- I O) L% `
- i9 s8 |" i2 Q8 C9 G
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 }9 g8 V0 c+ L .leds = da850_evm_tl_leds,. m! c0 z! C- ?) g! |: t! G3 y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ ~- L& _; q$ Q9 b8 L9 R& U5 z4 ]};
/ y9 R. l7 ]' w2 i
- r4 B: m( Q2 k' z; Hstatic void led_dev_release(struct device *dev): u: r; S# k* a
{
~+ d* P c1 k; o};
6 L& a9 F7 Y8 C' \- J( G6 o# A7 o& g; [' Y: {
static struct platform_device da850_evm_tl_leds_device = {
3 F! S) J& I# f C5 b .name = "leds-gpio",
8 G8 V# [% m% u2 m- C .id = 1,
9 P, P& u E6 H! C .dev = {& I) ~6 k$ M5 C; H4 `4 x9 G( {# h
.platform_data = &da850_evm_tl_leds_pdata,
( H: {* D5 q& d+ R. | S# i" x .release = led_dev_release,
Y3 {" e$ M2 J" W/ G; X' F$ R. c9 s% j }! t9 H7 }& f+ E# ^ W! k" d$ r
};
0 k6 I) c# u$ s! ^ S ]( y/ n) K9 d0 T( g5 F# W
static int __init led_platform_init(void)
6 F- K9 U: } H+ R5 r! V) B{ K, T2 w' U) Z: Z6 w( ~! m% L! [
int ret;5 \, {1 `7 f1 c* {3 O
#if 0
. i' `, T) r" q6 ~, i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( Q0 v* O. r- L9 i( W) ` if (ret)
- J! E% X4 P! n3 s pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' L7 B% d. L6 `1 O
"%d\n", ret);
: l) Q: D6 U( c4 z3 w# D d+ w#endif
3 w0 A- z$ ^! Z' E2 R ret = platform_device_register(&da850_evm_tl_leds_device);
# H' s# H R2 t+ t$ l if (ret)
4 Z1 w& C2 D. S% f8 S& T+ J pr_warning("Could not register som GPIO expander LEDS");; E4 _1 g! k0 |' C
else: g v6 A; R0 g+ q$ n/ V5 l( A1 J
printk(KERN_INFO "LED register sucessful!\n");1 S$ _8 `- `+ t) ?
! |5 U F$ X$ B1 D* D6 R
return ret;
3 H k* N' Z. ~- b+ Z3 X' _2 o}
) _9 `# g# p+ W# z( [
' P3 J- _7 `) I; ?7 dstatic void __exit led_platform_exit(void)
; C) i- M5 O* w' [{" O9 R+ o; {. b% u( g, Z2 \( g. N
platform_device_unregister(&da850_evm_tl_leds_device);/ s. D, O, \3 K- B5 c9 O3 Z
]+ U% i, y f
printk(KERN_INFO "LED unregister!\n");8 H/ c; A) T3 h, O4 P. h
}
; s6 ?5 _* }# o/ L: } Y
- K) Y4 |- P; A5 f# [0 A" P, o5 o0 @module_init(led_platform_init);( l7 c. q3 ~ _/ P5 p0 ~. T" |
module_exit(led_platform_exit);, k6 j7 o4 ]# [# ^
+ K" b1 \! I/ G) g' [. i Y; tMODULE_DESCRIPTION("Led platform driver");
" q3 x2 W. I. x# G, zMODULE_AUTHOR("Tronlong");
* x+ I; J' M& N# CMODULE_LICENSE("GPL");/ f7 w" n5 ~% n P4 M) u* r
! s: c; t4 w& {0 [3 `
|
|