|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- j1 _* g* E4 w* U+ `#include <linux/init.h> j6 D, Y. C% h9 p% a1 ~
#include <linux/module.h>4 ]" O* k# ]. S0 D* r' b# s4 ?
#include <linux/kernel.h>
. h- I. g W" u' j" V#include <linux/types.h> G2 ], V9 v' o
#include <linux/gpio.h>
. s5 T2 W5 h$ V( N# ~ ^0 e#include <linux/leds.h>* F# O# }% K/ d8 f2 e, X9 C
#include <linux/platform_device.h>
4 m6 K9 L5 S% N Q1 I! }9 j& b# C- F: A
#include <asm/mach-types.h>2 o& q p) I6 [/ h5 x0 Z
#include <asm/mach/arch.h> Z: i2 P& n+ G1 ` p( N
#include <mach/da8xx.h>& p- W4 e* J- ?5 ?
#include <mach/mux.h>
9 F% z( e% |6 F, w( u6 K( `0 n! p: `
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 Q) C$ Y0 e7 C1 Y# C- S- b
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 \, N6 m8 d$ X& G2 H! [1 I#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% J' w ~' |1 z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! r0 h/ r B! \- s- W0 U# H; J
+ J6 K' ~4 B G' G
/* assign the tl som board LED-GPIOs*/6 h) }) J8 S# ?- d* U9 X
static const short da850_evm_tl_user_led_pins[] = {9 P0 x' P8 Q3 C
/* These pins are definition at <mach/mux.h> file */
( L d6 ]' M0 R; B- ~# Z0 R; r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 k! [3 J& z5 |# f( G S; w -1/ ~6 u X: t7 S- Z0 c
}; [; D8 v. d! m7 _
! |7 Y! G s/ P2 t5 s, ?1 }static struct gpio_led da850_evm_tl_leds[] = {, T0 |' g) Z6 \2 S/ {5 F1 x& G
{4 k/ V; B E9 ?, z6 w: ^' }
.active_low = 0,5 j8 ~2 e! m$ V6 G# O
.gpio = DA850_USER_LED0,$ _! p9 v" {" q
.name = "user_led0",
- d W' y/ e' }1 N4 i .default_trigger = "default-on",
4 j, I) Q2 u; m0 J9 o+ j3 L- O o! [ },6 n) M( D7 j. L$ f
{6 c% V x: o8 _. d! `
.active_low = 0,, M+ J4 E; r. @* b1 Q B; p
.gpio = DA850_USER_LED1,. T1 h) z0 z6 N! O; W, O4 _- c
.name = "user_led1",
" @. O' f4 x* L3 t .default_trigger = "default-on",2 y( w$ u! }& a
},
" ^- Z; P9 e. F/ C8 Z9 k4 G5 Y2 z1 A {$ T% ]( `: ^2 ~: T
.active_low = 0,3 o2 |% g! a9 K. h0 G. [1 C
.gpio = DA850_USER_LED2,, _& [6 c0 e3 i- B( A
.name = "user_led2",! U3 b0 X/ g' M( W' M# a
.default_trigger = "default-on",
" }* ]' Q# ?# S/ A },
* |9 G4 E' P! f, D {; m0 ?1 J( ]8 }# Z" W5 H
.active_low = 0, C; N, _. a0 w( S' l' z F
.gpio = DA850_USER_LED3,
) u5 S( [0 n3 g) H$ @$ C+ A .name = "user_led3",
. C# }5 U$ x I j. m9 u* p .default_trigger = "default-on",
, I2 R: U2 H( x7 L4 n },
# T$ x [( p( _/ z# g};
3 S# _2 m7 h' K l' [
& Z m# {- f4 j5 W8 Ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ n5 |9 ~/ {- J- ~
.leds = da850_evm_tl_leds,+ h: }7 x( K- T5 p% i
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ v. C ?1 f. M8 \};" P/ F: m3 K1 D/ c
6 k F4 v( F, P+ b! F) ^6 F, |; @! @
static void led_dev_release(struct device *dev)
+ D- S- l4 \( T2 o* N6 R# M3 q{- W! }. S- I% H, D
};
9 Z% a$ U0 ^6 {6 ~! V4 U1 m; {% a" X5 ?* [( a1 F' m/ j! w g" P
static struct platform_device da850_evm_tl_leds_device = {
4 z7 Z* o0 u9 r, U; m .name = "leds-gpio",
1 v+ T0 Q; [$ l u# Q .id = 1,
2 ]' P6 y9 {) K( B .dev = {' m( v. Y1 J) P1 n( \
.platform_data = &da850_evm_tl_leds_pdata,
' e2 u$ Y) @8 x7 i# c .release = led_dev_release,1 T* t5 S2 h' Y4 `
}+ U# y- ~) |: t
};# P+ {6 t( T. f7 X
' f- ]; C" |' M+ H+ o7 ^static int __init led_platform_init(void)
) r) Y8 T$ h$ M% D, v{! y. ?/ |) Q( A1 H: k) a
int ret;' w$ {3 ^& Z; w
#if 0
- E+ n7 k$ R2 k& r# [ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 q$ G. l* Q, r4 U. `
if (ret)
- ~% D4 Z6 J. H pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 z2 l4 h% n7 } "%d\n", ret);
% X3 m* c# f9 O#endif5 F* W# k, G: y& o
ret = platform_device_register(&da850_evm_tl_leds_device);
4 q' ?. w4 u# I9 @' y if (ret)# L. r; R" W, p. F' Q
pr_warning("Could not register som GPIO expander LEDS");
; i3 g2 P' f, k5 |& \8 }, j else) \. m3 n/ k& |( u4 M; @! H. ~
printk(KERN_INFO "LED register sucessful!\n");' e+ S1 p% I: M& p a/ U! u5 B
! h, Z* E5 b- h0 h n B return ret;+ T; D* }: ]: S/ X1 d8 a, N
}
% u9 }$ ~) Z& w( K Z& u9 l) c
static void __exit led_platform_exit(void) ]6 L/ @7 A2 P% T# _' m
{
3 ], u. p% `1 y* _3 M6 b7 {, ]/ ] platform_device_unregister(&da850_evm_tl_leds_device);# S) h Q8 g3 @4 j4 n- Y7 E
) [# ~; | y5 Q/ K. ]# f5 _) E% R: z printk(KERN_INFO "LED unregister!\n");) n1 g6 x1 u7 i( ]( O) m
} ~* J' \ ]. S: ^3 @( I
c3 Y1 K- M6 i* o% v# T. ~( umodule_init(led_platform_init);
k4 ?4 n7 x8 Q3 N$ `- bmodule_exit(led_platform_exit);4 e' s$ Z* s l; t! v$ [
6 V; L/ j$ M3 aMODULE_DESCRIPTION("Led platform driver");
! p+ E1 m5 A* R/ |3 J$ jMODULE_AUTHOR("Tronlong");: k/ t8 r( X: X; Q8 \
MODULE_LICENSE("GPL");
: A* W! Z. w( k7 Y" o$ N- \* l3 ?! e8 G, @7 W+ p; B
|
|