|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" f- e' _: W$ Y0 K) {
#include <linux/init.h>3 K. T! A+ P% E; ~- I* b
#include <linux/module.h>1 }4 a0 G4 q: z
#include <linux/kernel.h>: x9 b* o ~: X" O% D1 o6 H* Y o* X
#include <linux/types.h>" X& L& L- x9 I+ c* B
#include <linux/gpio.h>" y7 F5 B6 ]) R# p! w" s
#include <linux/leds.h># V. @2 B. i. S7 I
#include <linux/platform_device.h>
- n- ~2 d2 H( F8 J8 a, l4 F& g- F9 c M* ^# W
#include <asm/mach-types.h>6 z+ U1 O& |* Y- E9 z1 V- u/ d
#include <asm/mach/arch.h>' r' ?' l$ K' U3 {3 b8 x
#include <mach/da8xx.h>. r0 m9 n" [% g, |* H' y
#include <mach/mux.h>
, _: |' ~2 R0 U& ]) x% z% }& M, O- L `2 N' Q W- R8 q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 ?5 G2 o a& {% k! @+ f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 z0 r! n* e+ r0 F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ P# k: Z* l0 n4 r9 P" \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 R) u9 v- V0 R! t# [- E6 f
1 [3 g# Y* k0 O, j" b# p/* assign the tl som board LED-GPIOs*/! Z# @. V, A2 n3 \+ _: e
static const short da850_evm_tl_user_led_pins[] = {
) O/ L( E- N! k1 q /* These pins are definition at <mach/mux.h> file */
: D) ?" L* k8 j. u# t5 N+ c( R" V DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, G. _2 Y9 i7 m1 l, e
-1
' ?8 [8 w7 k, j5 j};; y( ~. \( ~0 D, g2 R& o* n) R
& ]5 Z" ~1 Y% J3 j) q
static struct gpio_led da850_evm_tl_leds[] = {" i" B+ Z- T0 l1 }5 U- w* p
{
/ p( H& }3 O9 i# ~ .active_low = 0,
( J# b5 {. `4 O9 o: w$ f; O9 A# q .gpio = DA850_USER_LED0,) a- W% S! g) J) Z1 H
.name = "user_led0",
3 N' K: E2 X, q& A .default_trigger = "default-on",8 d, \% i* M9 e4 M1 a5 F; y! u0 a
},
. }. c" ], Y7 u+ r, l7 o {* g% v) H, X$ [
.active_low = 0,
: n0 W& k. F$ X) F .gpio = DA850_USER_LED1,
- }, T" ~& h* Y" X" Q5 w: [/ l .name = "user_led1",
* v h0 u1 H, O" U. e: J .default_trigger = "default-on",
6 L2 P1 A7 s6 p1 b E. S4 k },$ j! g! U }1 d. l* |( ] Y
{
5 ]+ H: j2 E4 H# {$ X. k .active_low = 0,
7 H7 U# t' ~' \/ r8 N .gpio = DA850_USER_LED2,
8 v# B7 z. L! }: r7 w+ p5 q .name = "user_led2",
! e. u: u- T! J. P3 S2 t .default_trigger = "default-on",
$ r, s1 U: [( u" o R7 {8 H( g2 B' ~2 b2 Y },4 V! E* i8 ^. f5 q8 P4 j
{
G( P% K' t4 Y; v9 r; A .active_low = 0,
+ E& Q9 D0 [" S0 y( b .gpio = DA850_USER_LED3,2 [/ {9 H( T6 s3 v
.name = "user_led3",. ]( @3 h8 a2 Z! Q
.default_trigger = "default-on",) K4 J4 m9 T6 |1 k1 b: ]
},
% @5 t. [: o, n, P; T};& N* c& {* b! R
9 U: G t5 G* _3 Bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 h" p& Q6 c1 @( D2 r2 s
.leds = da850_evm_tl_leds,
f0 }3 d: ]: e, {( w .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 y I x, ^6 N3 m9 l; {! k2 H};5 F. W* C: L$ ^- Z: Z9 \, S+ u, @
, L# j% f& `8 |5 Zstatic void led_dev_release(struct device *dev)6 E& V! d8 ~1 u, N! _! R) f' _
{3 }4 @1 h8 ?* y: s6 N. ?
};* h& J$ v" P0 Z; g+ I1 t9 ^
u8 k8 K' }5 i D+ x6 r: f! P
static struct platform_device da850_evm_tl_leds_device = {
9 m _$ H+ p F2 O1 G4 V' z .name = "leds-gpio",
, v4 l: F) b( P, r( x .id = 1,: s7 M+ S$ }( P; ?
.dev = {. }: Y/ C7 s; ?$ b
.platform_data = &da850_evm_tl_leds_pdata,
' m9 K. h4 {+ w1 O" _' Q .release = led_dev_release,
( ^( v% z \( C! |% v+ s6 B8 W }: L4 n2 N6 T+ }
};* U5 n: s: n7 d- z
8 j+ H o) ]; z) n1 I; \+ y; X2 B
static int __init led_platform_init(void)
' d1 H2 a N8 e* T{
2 L$ P+ Z; \! q1 e. ?7 \ int ret;
) M( W6 S; Y- l7 X#if 0
1 \6 Q" o1 ]# s6 I ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% H2 ]( v L" s$ v. `9 |
if (ret)
. e7 f/ |: F4 m pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" n# P3 I2 H" F6 w "%d\n", ret);
9 F! W6 J/ |% [7 z% Q; g#endif
% q# _+ D1 H1 Q' x8 p5 M( v' r ret = platform_device_register(&da850_evm_tl_leds_device);
8 ~( c& \- a0 u, I* ^ if (ret)
5 K0 r+ L8 d/ \ pr_warning("Could not register som GPIO expander LEDS");8 y$ D' s- a. |- |
else, ^3 P9 b- |- j! s2 x6 F& J
printk(KERN_INFO "LED register sucessful!\n");
! u7 F `0 j( f7 R Z3 n6 K2 n n8 p4 d3 M# z1 v9 \, | j
return ret;2 [) S7 w, U' j# B
}+ H$ P$ t- v' h2 B& \# J% u
9 s+ ?& r$ r) b5 v K8 Gstatic void __exit led_platform_exit(void)
- J. c% @& p- D! P% Y{# Q2 [# e6 r& Y" X
platform_device_unregister(&da850_evm_tl_leds_device);/ | Z0 m$ R$ `: h$ G X
5 Q# O' B' K* } printk(KERN_INFO "LED unregister!\n");
- v) L) f* _/ [}* W* m" B: V" E( B" \, ^
$ }: A1 \8 b+ i, qmodule_init(led_platform_init);/ T" y+ K2 e8 v- y5 F
module_exit(led_platform_exit);
7 b) A' C1 }+ }: q' e, e! B+ {2 @# Q9 _; l% ^3 Z7 Y" d
MODULE_DESCRIPTION("Led platform driver");. y; S. t x, q
MODULE_AUTHOR("Tronlong");
" }% u- f; P0 b$ p8 t" bMODULE_LICENSE("GPL");
4 H; h4 \0 ^( E! N D
% s& R& S& \$ P) H8 i |
|