|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ B- _, d# l2 ^: V$ H. {#include <linux/init.h>
/ q1 ^" M: A# [3 j1 ]3 X# K#include <linux/module.h>
k) A) Z6 b! z2 ^: [#include <linux/kernel.h>
3 I1 v, \2 ~+ [5 t: {9 i4 v# H#include <linux/types.h>
m C4 X, u8 g. b3 a5 ?) a2 U) \#include <linux/gpio.h>
3 f1 n! O+ \" V, b0 a/ B#include <linux/leds.h>
% Q2 i9 O+ @% c3 z3 h( m' Z#include <linux/platform_device.h>
( m2 v9 x2 w+ `7 H& n0 Q, s5 {
- J8 e3 m. O: D4 C- M#include <asm/mach-types.h>
+ l9 o8 | ]3 E/ y0 R! N8 l4 P#include <asm/mach/arch.h>
) m( _% I9 P' t, ]3 z#include <mach/da8xx.h>
. e% R# B! f0 J+ f) `) O#include <mach/mux.h>' e* }- M0 Z8 q7 J. a
4 _+ _! a% C0 @$ b }' z( h" c) _
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 n; Z7 i. o8 @: H; E7 R#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 v" N" r! j, _1 L" }7 ^. w" d, U#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) F& q- Q# N3 c9 B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) Z* o. b% x. o2 _, b" k
; k6 d" ]- a5 F( x X
/* assign the tl som board LED-GPIOs*/
`9 G! R( e" j9 R7 Fstatic const short da850_evm_tl_user_led_pins[] = {
I, \% Z3 j: n: E& W /* These pins are definition at <mach/mux.h> file */( b* @% f$ ~( q2 K2 _
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. T+ a9 Y! D8 X. S/ o7 l4 ?' b
-1
e' m+ }$ p% D ^/ a Y$ `3 ^};
% t" i" Q/ X, j& u9 T8 \8 J9 I; J1 _. K' r; @) l* V6 r' S
static struct gpio_led da850_evm_tl_leds[] = {
9 L' A" w$ E& K7 l" m S {9 o* w3 m2 ]) P; x: F
.active_low = 0,8 f. _! F7 ~+ D' g
.gpio = DA850_USER_LED0,
9 d. a1 Z O) |# t/ B .name = "user_led0",) D* @8 J r; ]4 G
.default_trigger = "default-on",+ t. c: k7 l/ z* y: q2 [
},
3 _9 i3 @, F! Y# f: x H8 g8 J* R {
8 b ~+ X B. A0 c; @6 O .active_low = 0,
. ]' `$ R" P" t8 Z .gpio = DA850_USER_LED1,4 w" N' z* Z1 |0 t( e* _0 B
.name = "user_led1",
8 p$ ~2 W# b9 M7 d8 y0 \+ Y$ K: ^( x .default_trigger = "default-on",
% d9 V. m+ v2 t! \; k: G+ c9 k% c }, V7 A; w$ X: M- ]4 g {: a
{8 N- z2 B: z) R6 P- h0 v6 L' Z
.active_low = 0,/ r7 m; E3 g1 _) s7 V/ G
.gpio = DA850_USER_LED2,/ Y0 e+ Z/ s& K7 a& G4 G/ o' ?# x
.name = "user_led2",0 ^: V, s. o6 a" i3 u4 V
.default_trigger = "default-on",
2 L6 Z* I: ^; A5 l7 G5 c$ | },3 b* Y6 i* A2 {' Z* |) B
{
( o; g6 W( {1 @ .active_low = 0,3 I/ P, X' D( K" C: v9 Y
.gpio = DA850_USER_LED3,
, V% e; {2 s7 O& D5 R .name = "user_led3",
. y! O# F; c9 Z( s x0 k5 c5 s. B0 H' N .default_trigger = "default-on",
( L, s+ g" ]/ f% s( S1 o- I% r },3 f( D; d7 ]: W4 Z8 h/ o
};
' g* n- ]5 c. z% o X9 ^- T' @5 |9 m/ @) g
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% h7 d N* h, A* U7 ?3 Z6 v( b .leds = da850_evm_tl_leds,
. z% O& Y9 X* ~5 S8 J( A0 U, | .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. D: ~* q. ~. Z8 u' |4 n
};! @+ C) E# M8 r
' ]; }4 | P& I1 E& o" v. k9 q
static void led_dev_release(struct device *dev)
1 D! d1 M+ |5 s1 A6 P0 U; E1 L{
6 o) Q, a/ }8 s+ y+ ]* o9 [0 x m};4 G( y# p7 H2 c3 B, C
* b$ Y! G* G N* [) E* S
static struct platform_device da850_evm_tl_leds_device = {
7 d* ^& I8 k! M. [ .name = "leds-gpio",8 `4 d5 |; q/ c/ E
.id = 1,
5 n: d: l: E! L7 a+ P .dev = {
* Y* O/ m c& Z% {$ q! h# A .platform_data = &da850_evm_tl_leds_pdata,* T0 y$ h4 d. g
.release = led_dev_release,
2 e; ]6 s, H2 q" r3 g }
+ Z7 v8 g0 ^, T: D' s3 U};: l7 M, a5 w" w3 s
3 o1 r% C8 k" Z6 p, G- [static int __init led_platform_init(void), Q. u. r. u% q3 p
{: q, n Y" P% G: u. f8 g: R
int ret;. m! \ I& ?8 y9 U
#if 0
5 N- q" |$ u4 H6 O* G ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ O$ L! }9 H& t' ~# |' ` if (ret)+ D7 Q2 I- i* b7 R5 I0 r/ F/ E/ w
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 g1 u5 J" W, G: r "%d\n", ret);
1 ^1 h* M" g1 M#endif
3 [3 w9 w" [! R; m$ S6 a8 L' p ret = platform_device_register(&da850_evm_tl_leds_device);
* [* ]# Y. K, v: W( i' i; x if (ret)
- g. K$ L8 l& t6 x pr_warning("Could not register som GPIO expander LEDS");% N' c3 V. ?0 `& V7 S ^. _
else
( s& D8 c) I. W8 z$ |! ?$ a; T. p+ s printk(KERN_INFO "LED register sucessful!\n");
: G+ Q1 q0 p# v; ^4 Q$ M
7 }% N9 ~9 ^3 a7 V. y+ B$ E return ret;
& Q; k# |2 n) P9 m% O5 P}- X, ~. ?& e$ g# q# F b6 Q% Y
( o3 U& b: V- D6 N! Z1 f
static void __exit led_platform_exit(void)5 d9 V. N* m) m6 [
{
7 _$ d4 W" s6 b. q& q platform_device_unregister(&da850_evm_tl_leds_device);
) C( ~ V! y3 _/ `8 s7 S% f$ i. C- N' g1 q; j4 {
printk(KERN_INFO "LED unregister!\n");1 h* M1 [: S% v3 M, t5 u
}
* ?% u9 S/ J( G4 w( @9 G* U1 X) T8 O3 ?' A7 h0 O
module_init(led_platform_init);" \" e z' a1 C( [, E
module_exit(led_platform_exit);
! @. [9 a& _5 n- _& j8 i# q& b( l3 D# y# d
MODULE_DESCRIPTION("Led platform driver");/ n+ c! [4 x0 ^2 u( v, j' n
MODULE_AUTHOR("Tronlong");
" t$ K! a; m7 GMODULE_LICENSE("GPL");
/ A$ W! W) \# \7 P' l$ Q- Q! o; t$ h: a; z5 X, |1 ?1 g' b
|
|