|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 y% e; d. @6 l
#include <linux/init.h>& e1 J+ l, L0 }+ g3 V
#include <linux/module.h>, P* r' @9 W, D Q! j; l W3 D
#include <linux/kernel.h>* H6 \6 Z- a# e" a0 x s
#include <linux/types.h>
9 } d6 S. F2 E+ e, u+ _* |9 W#include <linux/gpio.h>
4 r; B, J+ |% j: b( @#include <linux/leds.h>7 O- M% g5 w5 k5 i/ G
#include <linux/platform_device.h>
$ g/ e* e/ Y( s; e2 Q, D; ?$ k8 q- c2 t
#include <asm/mach-types.h>( V* R0 Z- i& d @# ?- m1 i
#include <asm/mach/arch.h>
" A9 E9 q0 r7 n$ T, _#include <mach/da8xx.h>- u" J) i6 a% ?( l
#include <mach/mux.h>3 k+ Y( L' D. a0 ]7 R4 I
w) o$ ], }+ z5 b% j
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 C; x: L& j# g7 }+ n5 m6 ?#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 _" w' k# `4 q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" l# H$ M( z) h$ c0 }#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ l: m: y5 X: J/ z9 _
% p# c5 X/ V8 x) L8 P
/* assign the tl som board LED-GPIOs*/
+ p; c1 v4 V2 r/ j0 ]! q: Mstatic const short da850_evm_tl_user_led_pins[] = {
" r8 U R* g* @( } K6 b5 x8 } _ /* These pins are definition at <mach/mux.h> file */
+ C& }9 u0 P) Y1 w6 C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' X! V( u1 }6 A -1
& e& E- j5 M9 j. }& Z, [" z};7 E2 _5 r( ]& y+ d2 ]
* }# H4 _, U: R/ Dstatic struct gpio_led da850_evm_tl_leds[] = {, }/ ~. F! B1 `: y6 y- A/ x
{2 D- d: J+ l' K' k0 @+ r0 U" J3 c
.active_low = 0,
0 s8 G+ I8 U9 Y9 ?- w .gpio = DA850_USER_LED0,( u1 k1 G$ @ ]9 F( |6 `! ~
.name = "user_led0",
/ { ~$ {3 i' _0 X" S; f6 U .default_trigger = "default-on",
0 w; \/ F1 Q5 \* M; e' q3 F7 I },* h9 ], z4 ~% i
{7 C7 b/ W& _# c; A- M
.active_low = 0,) }! d6 C$ S+ [: Q _
.gpio = DA850_USER_LED1,% |/ o1 \ g- D. N4 J
.name = "user_led1",) p, k* u% e/ _6 k5 ~: G
.default_trigger = "default-on",
/ b# M4 `- j# ]9 b) e& `" H# A },
: m2 e5 q+ O. q/ ?, i2 r P {
$ a8 O$ R. Z0 j- R& Y g+ c .active_low = 0,- z/ o% c3 ~# |& K2 I
.gpio = DA850_USER_LED2,5 S! v. O0 M7 Y ?6 k- Y
.name = "user_led2",' R ^: B3 D6 |2 n
.default_trigger = "default-on",
2 q! c, |& U; Q4 d" w( V2 W# j },
. x1 Q3 [' W9 a2 l Y# B+ \ {
2 S% {* J3 @; L0 o .active_low = 0," @) x! B* O% I/ ]: g7 K
.gpio = DA850_USER_LED3,
& d6 m* j5 B6 X" `1 c: M- a .name = "user_led3",# M1 p9 [5 ^4 U% n% r
.default_trigger = "default-on",
9 x4 K, S2 |+ c* E9 @ },0 f' B- b' s" X' |9 Y. J
}; N( M& f+ B) S& j
& _* y0 p' d% o6 ], }- zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 N, Z9 h; m! i7 d( ?
.leds = da850_evm_tl_leds,! b0 A3 R" ^ y3 {- j
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" S- E8 x- y( K};; S. s1 |- ?+ F0 Y# o
' }, u: S; ^! F. S3 y
static void led_dev_release(struct device *dev)
# P, N: Z' ]* {8 M4 A{
0 L' ?4 m( @. \$ n0 o};% Z; O% Y; ~3 D( T3 u* x- s) @7 F
6 t3 f. u4 L7 P0 F$ a" qstatic struct platform_device da850_evm_tl_leds_device = {
0 J, V: v' O" K& z8 p .name = "leds-gpio",1 [5 p& o# o1 Y! L" I! F1 T* r
.id = 1,7 Z \7 a- }4 O# d& \, \6 U: U
.dev = {
( o% k+ l" ], u9 _" o .platform_data = &da850_evm_tl_leds_pdata,) s2 D- V/ @% X* o) ]! |0 e4 ], ]- b
.release = led_dev_release,
3 L- Y) g4 I' `7 u. Q }+ b0 \: O0 W. `
};$ |7 p& Q v' J8 ~1 T: e
* \/ r( X% W* b6 f8 a/ W* Pstatic int __init led_platform_init(void)& i C m7 s; k' ?4 A
{$ o4 O$ h. H7 z3 E* h0 h, z' I d
int ret;
2 ?8 b1 E! [9 A& J, V4 x9 O#if 0
" L; x" _$ Z, e* ^' w0 g: W: ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% b, @6 f3 \' C' |1 [& H
if (ret)
7 n& g4 \# O$ h8 J6 f pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ \& i& C2 d6 G3 q' C
"%d\n", ret);
8 H5 w5 R3 y2 v/ U- M# l6 ]#endif
! @6 y0 Y! k/ j% Q$ Q4 d ret = platform_device_register(&da850_evm_tl_leds_device);* B) u4 L, K& E" C0 f$ h
if (ret)0 Q' r5 g" N7 y2 X! j
pr_warning("Could not register som GPIO expander LEDS");! _; \: Q5 G+ c: U0 |6 W5 h! o+ _) E
else
2 e- Y8 g" o3 Z+ [ printk(KERN_INFO "LED register sucessful!\n");/ r9 Q% B0 V6 D* N( ?8 o, `
; S" j. |+ c, c+ i( I, T/ ]+ f return ret;
) f2 G% O9 p1 _. C( }2 ?7 l+ e}
\1 z- F, x2 u7 i
7 X0 I% U/ ?2 g! M2 ?3 Nstatic void __exit led_platform_exit(void)
# z6 Q6 F( |! o" n: J! I* R+ V{
9 A, w1 o! G0 ? platform_device_unregister(&da850_evm_tl_leds_device);0 ^' V8 I! Q6 p% A0 A
( w- B, B- V, Y( R a8 r( u printk(KERN_INFO "LED unregister!\n");
. W$ N" } U! N% Q* \3 P) l8 m) t}
* n. h0 ?% @% [# Y' @, m' a8 q# d7 a- X3 O3 ^6 p8 I0 L
module_init(led_platform_init);3 m- @1 G* T z; ?. ^
module_exit(led_platform_exit);
' d9 w1 r, W7 A; b8 D( q" p9 p5 _/ ?' l8 Z
MODULE_DESCRIPTION("Led platform driver");+ R. T& _. \. D
MODULE_AUTHOR("Tronlong");
1 D2 o8 N; w! @4 V5 r# c# W8 [MODULE_LICENSE("GPL");0 ` p+ Y8 P$ b5 a$ y$ f& d
% u4 W' ?) u1 q9 w* } j! {: _
|
|