|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* S: ]0 Z% R* N+ d4 v8 [* W" U
#include <linux/init.h>
8 b! p# j( u0 R#include <linux/module.h>
& C1 e1 k) C0 R5 |5 }& Y#include <linux/kernel.h>/ S1 I; [: P0 W% W* [4 F6 i
#include <linux/types.h>
. ], @2 ]- s( E& B" v- h6 t' u#include <linux/gpio.h>8 n( Q! C) x# ]) Y+ x
#include <linux/leds.h>
( p6 a, K. H' I: w( L. f6 q#include <linux/platform_device.h>
+ W0 A0 x$ ^* q& D! X/ q
1 V, x% l& s2 z7 d0 s. J#include <asm/mach-types.h>
0 j3 `; W* I* H#include <asm/mach/arch.h>
# E8 h, m! p1 S1 Y3 x3 T- N#include <mach/da8xx.h>+ K! R4 R5 @ V4 Y
#include <mach/mux.h>7 {1 F1 z/ {, k5 R. _: |" y
# `2 R. ]! y# n% R5 S" @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ I' l5 V% ^7 e4 t/ ?! W1 O#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 F0 h% E+ F# r4 U ?
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 }/ ^. C3 \( V2 {; k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): g7 z' g# Z: l! s
, V+ J! |2 ~; T7 O2 J/* assign the tl som board LED-GPIOs*/- J8 K* V& B: `% \8 F: w! I
static const short da850_evm_tl_user_led_pins[] = {
. d' `: s0 z( @, i z /* These pins are definition at <mach/mux.h> file */3 `: g# q2 o; f+ p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. t; x: V! i |) ?$ c! V2 H
-1
" m( j( k( ]5 \6 y+ v* @};
% Q" [) p" a b# e) F1 g) H" [
" O5 u0 I2 i" \; a% U8 jstatic struct gpio_led da850_evm_tl_leds[] = {
% q. s' \8 S5 o: o# X8 [# ?6 j {
; o( D/ M" o2 Z. y% D6 } .active_low = 0,
, V( K3 y3 v/ Y, i$ M. C3 R .gpio = DA850_USER_LED0,
7 `# E( p4 u+ S1 u4 W# k% S' i .name = "user_led0",
& X: @. W. B+ y# T& ]- H .default_trigger = "default-on",
1 j" I$ `- E2 H# t" U7 U0 z0 Y- m },
* E# Q! n; v4 J, g {' P/ J7 h/ A& W. P
.active_low = 0,
4 d5 ]/ [( ^' B& Q2 v$ K& l .gpio = DA850_USER_LED1,$ e y$ |5 o( H' y/ }3 `
.name = "user_led1",
4 H, h8 K6 w D, F5 e5 F2 G2 n ? .default_trigger = "default-on",9 N* j* q. A2 V! Q3 K( r, g* ~
},
0 I+ f% z: s/ D {# f9 Z4 G: Y2 b
.active_low = 0,; n& E* I/ m0 Q1 m+ \
.gpio = DA850_USER_LED2,7 O0 C4 B; I$ U5 l- F c
.name = "user_led2",4 J/ q% j- W) N! i0 Z% Y. q
.default_trigger = "default-on",; i- y7 X5 H& q1 t
},1 F. w1 Y5 Q9 \- _1 l5 H
{) D7 `, b0 h- j7 G
.active_low = 0,
4 ?/ @/ n" Q$ B$ t, T7 Q .gpio = DA850_USER_LED3,6 }" ]5 k0 J/ ?- {5 P# S
.name = "user_led3",
7 U0 z! \$ l3 |# m1 a _/ t .default_trigger = "default-on",# A4 n( x9 Y8 [2 J
},7 G! p( }) h7 c- L) [
};7 f; s5 N) v0 t* ~3 D
+ ]: H+ r/ V8 v* O' I
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: b% S; o8 q+ D' k, C2 H/ O .leds = da850_evm_tl_leds,
. Z8 `& v7 ?2 ] M) c7 k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. j+ d0 m$ N" U( c/ b8 D};! H, ~6 C8 I0 g% f4 {1 a' i. b/ [, p
+ m, K& w1 t% f m! ]6 Y n" w. R: K
static void led_dev_release(struct device *dev)
, a2 z; H5 L' S. ~% @1 r{
N/ `4 [* M9 z};
! O+ l! \4 e7 ]5 r5 g, g# r
! p q6 L8 \8 A% ?static struct platform_device da850_evm_tl_leds_device = {
- z" f# J0 m. F( s9 Y .name = "leds-gpio",
7 _, R; W; b8 }. E3 n8 U* x! Z .id = 1,& M, v$ Z& D) z
.dev = {: f8 u, G* E- Z) |
.platform_data = &da850_evm_tl_leds_pdata,
- M; p7 [: R) e0 m6 ~- `3 B5 a .release = led_dev_release,
1 ]- l. b8 C: u _4 t! ] }
# ~3 j9 d$ v/ c& i+ f. M3 Q};* s& a+ N/ ?& S5 G6 A# J7 U4 G
8 n: `" h' g' t8 n! a& z
static int __init led_platform_init(void)
% x+ L' Y3 z* H9 x{
5 N3 X3 C" o7 P6 x int ret;
# c5 f! \# E" a3 M( j, J7 l#if 0
% T4 E2 }& T1 ]3 M. a5 u1 \ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ H: w; E9 F, E" d+ W9 Y if (ret)
) B% ?" m( v& S! `! d) X pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% ]# w% K7 J/ k7 t- N/ t, l "%d\n", ret);
3 j, |. Z3 e2 t& E/ A#endif- Q" E# Z+ p# c) e+ p [# L. L# n
ret = platform_device_register(&da850_evm_tl_leds_device);
9 t: v0 [* o' X if (ret)
* V+ u% c1 T8 a& O4 U) M+ t pr_warning("Could not register som GPIO expander LEDS"); [$ P0 A- J) Z7 M2 N$ r: ^
else! W, [* g* V, R! ]* T% {4 H; ?3 n
printk(KERN_INFO "LED register sucessful!\n");& `% O& v' E; n! \8 Q z" d
6 j4 _! Y; n% y" q/ ?2 H
return ret; C8 `, ~+ O2 u' ?, R" P
}
1 P$ @ t0 R2 {$ N8 R3 D8 I
0 a1 A1 [4 p' Bstatic void __exit led_platform_exit(void)
f6 L, o4 S o, L) N2 p7 ^{& }5 n; O: G) n: S
platform_device_unregister(&da850_evm_tl_leds_device);" l0 H/ ?* e! X. }9 m- n! b& e6 H
3 ^ J8 B8 n, r- L3 L1 x1 V printk(KERN_INFO "LED unregister!\n");7 A& G P7 j. K# h- ?- H
}( |5 Q7 P- \4 r% B; Y
! i% |' i% \* V4 x3 T9 a0 N
module_init(led_platform_init);. {5 k0 E9 y4 F3 E5 d5 i$ f
module_exit(led_platform_exit);
5 J2 K& ]$ J9 v W& }5 c/ Y' h/ J. E( m$ d* l/ d
MODULE_DESCRIPTION("Led platform driver");
u6 o8 V: [0 t- \4 J8 yMODULE_AUTHOR("Tronlong");6 I7 Z: [3 r$ F+ J8 a5 I$ P
MODULE_LICENSE("GPL");0 u4 s. Z' o7 h" d5 i9 O8 Y
: i2 K3 u+ `- f2 s, I% r9 d, A |
|