|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 v; ^- g7 w" O% a#include <linux/init.h>
1 |. F% A% h; I4 `- i; f. K#include <linux/module.h>9 o+ T. w" V9 s
#include <linux/kernel.h># z* b' z. b% `
#include <linux/types.h>
0 `5 S6 g& s' E* \) w#include <linux/gpio.h>* Z$ F3 ~# R: H: R( }
#include <linux/leds.h>
4 ~! I3 y8 N2 e; A#include <linux/platform_device.h>5 d3 L" m5 {8 K
S6 y6 o3 _0 v3 e5 q#include <asm/mach-types.h>! e$ U' G2 ^- A' I: b
#include <asm/mach/arch.h>" y( L! k% B! Z+ u
#include <mach/da8xx.h>" Q8 }0 N4 X" Q4 t6 g3 f4 ?
#include <mach/mux.h>1 j% i$ O) X- @, o! H/ x( @
" Y1 T& j4 F" E1 @0 M#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 t$ N" M* J: C5 o. T G% B& U c; Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- T; o, ^4 l# Y* k @
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. ~2 K$ f( \5 j* s( \ L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 C( S9 q; Z% r% _( }. D, e1 N( R+ D$ [0 H5 k& i1 f: s* y
/* assign the tl som board LED-GPIOs*/
& t: S: r2 b7 @/ kstatic const short da850_evm_tl_user_led_pins[] = {
( e4 o% L( e! v3 m7 @- }, h /* These pins are definition at <mach/mux.h> file */, A7 ]; ^' D: s* W+ u5 ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, N. S* X. Z" ^5 S0 ^- x% m: w
-19 a& k4 W6 n; e! }1 |$ A; X
};( ?( ]7 n( J1 z3 H2 @( ]
! I/ M$ W4 Y( W& A& J
static struct gpio_led da850_evm_tl_leds[] = {
, `0 v: ^: r. A1 m) o {
7 P+ Q }; H. j. o .active_low = 0,) I" P, n+ t _4 F: J ]' ~9 i
.gpio = DA850_USER_LED0, ^: e* Q* L9 v5 S
.name = "user_led0",: k* z: v3 b/ i/ M6 |2 B& h
.default_trigger = "default-on",
6 h# m5 O/ O. i2 _. k+ H },6 W( P- f: r3 }1 U; F( u
{) d Z2 w* ]( e' H3 |
.active_low = 0,
" Y1 J/ k- R8 ]1 a2 L+ ~2 ]. h .gpio = DA850_USER_LED1,* I8 P; D. M$ J$ J: s! ~
.name = "user_led1",
3 P0 F( _: @( J3 M .default_trigger = "default-on",
! Z; s4 } U3 o0 [ },% }; ^) _3 Z5 W0 \
{
) L" G( \0 @. [6 y! \" q .active_low = 0,
4 ^- W/ g2 W. r5 d .gpio = DA850_USER_LED2,
F) C* q# }% o4 ^/ @0 i% e, q" g .name = "user_led2",0 z q4 i; o S* L7 \
.default_trigger = "default-on",. j3 ^* F! i* b: `. q
},5 |' ~; v# R) N' ~
{, N" R8 n: C' o6 W: n B
.active_low = 0,
2 g1 K3 P* d- F. J' C .gpio = DA850_USER_LED3,
2 ?0 b1 o9 p5 G8 o4 b/ H .name = "user_led3"," v! r! b' M8 R. o2 ], I
.default_trigger = "default-on",+ @1 z* Y' W1 Y1 ~
},8 s, S/ Z# h/ a1 Z! q
};
5 U: m* s3 M! X# K
& I# g1 F( }; istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" Z' d6 z7 ~* t- a
.leds = da850_evm_tl_leds,
9 Q6 W& L3 b( S/ y) I! |4 O/ n( ^) B9 K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 Q! i) V- C( J9 ?* Y4 d7 ^};
/ ^6 I3 C, g: D; F. O a* g- p0 o/ L) z! |& s# ~. y
static void led_dev_release(struct device *dev)+ J& J& G# A% R* x
{
/ P5 p9 x2 W5 D2 p};
b' h7 v" X& b, e4 x( }7 f) I# U# b& ?2 r
static struct platform_device da850_evm_tl_leds_device = {9 }4 b T- V- X5 y( w" o, ~) R
.name = "leds-gpio",
: Y# t$ ?2 A' i6 V j6 m' K7 i& ~. u .id = 1,
2 z' r' T* b; x6 j9 E# B& A6 n4 h .dev = {
: c$ s( y, }) Y .platform_data = &da850_evm_tl_leds_pdata,9 V4 `, K' y( N: y6 _7 k! |
.release = led_dev_release,
. z9 u. }$ ?) {" y0 _ }) m* w1 Z& b; n2 [
};
( ~0 t, |7 [3 r9 G M
: N! T. a3 k, F; Z; rstatic int __init led_platform_init(void)) L' n' q: `& p% g3 _
{: a B- V& r3 y( G3 i
int ret;
% y: r+ q9 d% D' W4 d! l. e& Q2 V#if 0
: H+ x( N$ @9 | u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 Z) \0 f$ V- V+ Y6 |
if (ret)
2 u3 N6 G3 i5 e5 J; s( u pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 @' h$ O2 d' |7 `! ` "%d\n", ret);
' g( `+ k, y+ E! ]2 u( f#endif8 A, p$ D. p0 y G w4 w+ M
ret = platform_device_register(&da850_evm_tl_leds_device);
0 d" t! i8 @+ U, W0 P4 E. q if (ret)2 M! f- L5 b6 C) Y
pr_warning("Could not register som GPIO expander LEDS");
# u4 k0 }: W+ j$ ?2 u1 u else) ]( L) {% N' Y D
printk(KERN_INFO "LED register sucessful!\n");+ k7 [* {6 E! Z: W! o. q
6 ~3 f) z: l$ `) k0 C return ret;; o" a" X+ K/ G% I) ?% z) F' i, f0 Q9 p
}0 \$ ?: c p8 Q/ ?5 m2 H
$ O/ d0 M* t; {+ q) ]6 R9 `static void __exit led_platform_exit(void)
# j( U2 F$ F! M% o! i: \! J{) b' }/ G f: d* Z7 l+ S
platform_device_unregister(&da850_evm_tl_leds_device);
. ~/ K7 D, [; t4 C4 ?9 ]
% ], q" ~% q9 Y C printk(KERN_INFO "LED unregister!\n");
[3 \8 @+ R5 o4 b9 |}* T9 r6 G; [( `, U r! }' M
5 N e B0 i4 @/ `8 [2 r! A4 D: Ymodule_init(led_platform_init);
5 n1 l1 \: [5 i* N( X% U8 Emodule_exit(led_platform_exit);
, k8 v0 X8 T& E& A. L( {1 a% q _' h- [, m; M7 h
MODULE_DESCRIPTION("Led platform driver");' n6 ~; U$ H2 ]+ x- V% U6 r
MODULE_AUTHOR("Tronlong");
/ U; O* W; D4 U/ Z" rMODULE_LICENSE("GPL");+ z1 g$ Y3 [" R+ M
( V4 Q) j7 W0 E+ W |
|