|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; ]$ F/ @( v" G- n1 g#include <linux/init.h>; L! m, }% w8 j# R3 `. P! ?7 d
#include <linux/module.h>" h( S0 z% o* K. s+ g o
#include <linux/kernel.h>
* i: S7 b3 l: {$ [# f# r1 t#include <linux/types.h>6 v8 J! G7 D$ c
#include <linux/gpio.h>3 ?0 W1 }, [+ `
#include <linux/leds.h>( ? A' l. |0 G" ?% y5 i7 L- \
#include <linux/platform_device.h>9 v. H# N3 R- b5 f
) x& p% K. h \7 z7 B( d0 h% O#include <asm/mach-types.h>
+ x- t: X+ c( @# b. [( W#include <asm/mach/arch.h>
- l' y) _0 K" c; h#include <mach/da8xx.h>; S% e1 @+ |8 q T
#include <mach/mux.h>
" U0 ^/ ]- W4 i+ b6 K, z7 j2 y) O/ I' d; |9 N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) F- m0 t4 V9 c0 b' T+ b0 C" R% o
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
j. i- p8 u( t. R) @5 p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 c! C2 |7 u% [) V9 O: h#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) R/ g; l% M5 V+ D7 J; h
0 r# _) @) ]! @/* assign the tl som board LED-GPIOs*/$ R. p$ X3 p9 w' f
static const short da850_evm_tl_user_led_pins[] = {+ o# o% e: e/ Q f d$ a8 p6 `
/* These pins are definition at <mach/mux.h> file *// k F# [! F7 q7 M+ q1 j: Y4 [0 _9 [5 }
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) V, B0 q% K: A* T( z2 x- J -1( Z3 q$ T( b; O3 ^% i
};; N: x3 R: ]( n9 w- P. m3 E/ n4 W
/ P- A. {& X: p. H$ }
static struct gpio_led da850_evm_tl_leds[] = {
; Y U' l# ?( c- M$ Q+ l2 n2 W { d. V" F8 z" r
.active_low = 0,) u3 Y/ V$ Q4 K# f- j" i! Q) Y2 @
.gpio = DA850_USER_LED0," z* _9 a# E# y: d
.name = "user_led0",* v' ^: ]' d) B, N6 {
.default_trigger = "default-on",
' K+ ] V6 ~# B },% K7 x: Q! v9 n2 Z" W+ ]) J
{% m" P. h1 q" @( l2 ]5 B* a
.active_low = 0,
4 c1 \& F' Y. d3 f2 a7 z: v .gpio = DA850_USER_LED1,
/ g8 m! c: E) B! T' Q; x9 r .name = "user_led1",
0 G$ A$ q0 M9 X& g0 p" P .default_trigger = "default-on",
! n' u. `( H% u* S1 F9 M3 Y! q }," [( I% A% a0 N" [% K" C
{
) c% ~+ p6 b" v8 X/ k .active_low = 0,* ?! S+ D, R. n. {* Y
.gpio = DA850_USER_LED2,
' G( H: j) j* T2 \+ F7 d3 u7 b& ` .name = "user_led2",
3 K: X' c" r1 B$ q* O( O .default_trigger = "default-on",/ R8 z( L$ [7 r9 `: y
},
( x" I% ^) s, |: o1 j! F1 e# {% e {
( K2 i6 O! K! O5 {6 p9 P }2 D .active_low = 0,' n! r: o% |; I
.gpio = DA850_USER_LED3, z4 I1 P7 J, m& s+ f& r! R
.name = "user_led3",
5 ^. h, @0 g/ h .default_trigger = "default-on",. l5 F3 G9 `3 N
},
+ C% s& B1 G5 o8 }) u; p};
, w( z2 G, u! \; Z2 Q; L3 a% {
) g( W( u% @" ~( Qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: f) b( n7 V& R6 e( T
.leds = da850_evm_tl_leds,
1 w0 i) w" H8 K* r1 Z: y8 ?' r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# Y6 ?8 P9 ~' \. o. Z6 O
};
, l3 f# |' t; t D" p/ m1 I& A9 X" }9 e' A0 I( F
static void led_dev_release(struct device *dev)
' {7 \. i+ o! J+ Z( a* A{
0 p1 O: D9 X( F4 ~};4 D1 @1 j! s. O0 B, G4 h0 r# Y
$ _& t! ~# W( A/ x* q, [! t d9 w
static struct platform_device da850_evm_tl_leds_device = {) Q- E" F7 c: o1 ]0 O+ s" v! R
.name = "leds-gpio",
8 N4 b# N: k9 q: |1 Y, B/ m .id = 1,- m6 I. W. b$ s3 X. j* k
.dev = {
& k0 M- M* E3 L; U8 N! [ .platform_data = &da850_evm_tl_leds_pdata,
" D N) E# J4 Z$ v, i; l! Q .release = led_dev_release,, r# t2 M4 q0 X7 K+ p0 x. _1 ~
}, [- ~6 |) A; \2 i+ X
};
6 U" P* w) g* }
& _% u! r6 G/ V3 k$ S, mstatic int __init led_platform_init(void)3 ~& K$ I) X6 s( a1 V
{
: c7 k7 N2 l. @% n {7 H int ret;* w- D3 D, U9 g* F
#if 0' \2 `3 \$ s3 A6 z! P3 \- G. a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 g' K% R0 Y, H* @: x8 R( w
if (ret)
* P( V5 P1 Y) Q0 C* T( L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& d, E- t- h; [3 m6 J" K, w% \ "%d\n", ret);8 {2 J) q6 Z7 X3 R9 V
#endif* e+ V, k. F1 }) {2 J0 C4 ?. p [ K
ret = platform_device_register(&da850_evm_tl_leds_device);$ [) J9 J% Y4 q7 t# Q, y, ?+ N
if (ret)
& D8 A7 Q7 y6 m4 P/ D8 h pr_warning("Could not register som GPIO expander LEDS");& r7 N, N1 |, B7 ^
else8 D- D4 `0 q* p+ |* Y- c- l
printk(KERN_INFO "LED register sucessful!\n");& Y: g* _- `( `5 l7 y0 x# B
7 L7 @5 U8 n* x9 f6 Q/ m& M4 P0 \5 T
return ret;" `8 l3 Q( o0 F! ]( l- }
}# x: n ?1 Y$ p# X, j6 X
$ U2 f6 l; n gstatic void __exit led_platform_exit(void)
- g- j7 S/ p" |{, ?* E" y4 @3 g$ A% ?* n" O5 R
platform_device_unregister(&da850_evm_tl_leds_device);& k; }6 |( t1 E% r+ g
+ @" q5 N& a) T) M' `1 E5 z ~* x$ u8 W printk(KERN_INFO "LED unregister!\n");
2 ~7 h1 p) u- w- ~, N3 Y: D* w) P}
% j7 Q: l& E( \! E; |* V' z& l1 F' [# ~8 F+ L" n" U$ z
module_init(led_platform_init);
6 E2 u0 k/ A0 Y9 F8 Dmodule_exit(led_platform_exit);2 D: u& ~+ t0 X$ K
2 T* r+ X* L w0 I+ @5 O; K6 J+ ^
MODULE_DESCRIPTION("Led platform driver");* H5 W7 o# A" p" S$ W! u. D
MODULE_AUTHOR("Tronlong");& a4 F7 V# z/ K9 i; i% z
MODULE_LICENSE("GPL");
& M$ P A* G' H( ~1 _- F2 J. W0 x# t5 T5 v
|
|