|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' c& v( c( ^3 U T#include <linux/init.h>6 y8 Z' {2 a) l- j0 \+ |" M. h' M
#include <linux/module.h>4 r! G% E! H1 O: K! C
#include <linux/kernel.h>
) m0 Y5 h' I, l# l8 l3 ]+ z" ?#include <linux/types.h># r( ^1 G+ T: o& x& L
#include <linux/gpio.h>( V# t6 r# I4 [+ y" i
#include <linux/leds.h>7 T+ G) J( S& t8 r) x- ]2 w8 J
#include <linux/platform_device.h>
I: J' O/ q. N& \
, W# z! @# S W7 _6 x J#include <asm/mach-types.h>4 E- U0 G) w7 i3 {* R2 [
#include <asm/mach/arch.h>
7 d% _& S# G3 P#include <mach/da8xx.h>) ?5 u/ T" \! y* ]. f
#include <mach/mux.h>& k3 i8 z+ B g$ c1 S4 j
: y2 Q7 Z [. {+ x% ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 x; c, ]; f2 d/ ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' h! [- p5 @) o. R( E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( T# @2 e2 J5 b, v G7 o# q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 t) o! r- ]3 T1 S3 L' F+ V
5 T8 c6 F7 C7 l# ]( a+ {7 E- P
/* assign the tl som board LED-GPIOs*/
6 N3 F1 J. B, B8 P& @* H: O( hstatic const short da850_evm_tl_user_led_pins[] = {
- G; k! K* x1 I /* These pins are definition at <mach/mux.h> file */ \& s; Z$ P/ T- U3 [
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 p7 U) {' C" v% G
-1
2 _( p2 v0 e% a" i; S+ ~! l5 T};
1 }; ^$ e" S. n- }
) D* z' l& ?8 |0 Rstatic struct gpio_led da850_evm_tl_leds[] = {( ]5 B) Y( E) g: p
{) |" g5 x! I( D. V( H& i+ N( N
.active_low = 0,1 L( I% U0 H% r- S- i' a; q' i
.gpio = DA850_USER_LED0,. O6 J. Y `9 ? D$ P8 X/ z* \
.name = "user_led0",' t8 D/ X) R: g5 k; l6 S& t: H
.default_trigger = "default-on",: m% a# U0 N3 Z8 ?+ v1 c {6 E
},
- c8 O: w1 v) z8 f5 C+ O: C {6 b) n+ S# v7 ]0 K" O/ E
.active_low = 0,# K) a) q% T$ a8 C8 b% r E" _
.gpio = DA850_USER_LED1,7 @1 H; W- s3 Z7 n! ?+ @2 j8 K
.name = "user_led1",; M. @0 V) \3 U, @4 i1 x
.default_trigger = "default-on",
2 c3 C6 h* n8 f# \& w. v },
' U+ o" l J2 d+ e {% A% x# ~) l. M& V8 i: p
.active_low = 0,
; w: X6 q& W) b+ G; I* `3 n+ N0 f! w .gpio = DA850_USER_LED2,
* @$ o" C' M) C1 X3 x .name = "user_led2",
( W+ L# L+ Q& z. a- O2 ^ .default_trigger = "default-on",5 ~: d8 g6 T- ~+ ?: U" T+ m
},+ ~# O8 |* _; Z' ~. V* m
{
1 h) j$ d. V1 Z' V .active_low = 0,) H7 c7 ]; r. @1 ~) n4 L
.gpio = DA850_USER_LED3,1 a6 E- l- w" L0 {; j
.name = "user_led3",0 Y4 b+ \1 r, h- U- ~1 S+ @1 D3 U6 ~
.default_trigger = "default-on",
+ n" y7 u6 D3 H+ f, I& f },
9 i5 e u6 l0 j2 a};5 Y1 R: N) a& ^
* _; k8 J4 b2 q$ z2 Mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) n9 o7 Z2 f: Y. l' }
.leds = da850_evm_tl_leds,
( o' I6 s) l/ I( C( z! T& k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 C; P; v' A3 g0 q};$ c T3 V9 o: o# h6 Q% W, m
$ x1 n2 e. w9 J6 T3 u# u4 H! Ostatic void led_dev_release(struct device *dev)- g6 v* o; d4 \$ t
{: f; f, J, D1 {
};
# i8 Z9 ^( a1 S3 o9 ~/ N9 N2 D$ [% z4 a% c7 x: T* {6 d8 ^) Z2 J
static struct platform_device da850_evm_tl_leds_device = { `" `( b0 N* \8 Y2 K. U/ I
.name = "leds-gpio",
; ]% S3 @& p m4 u+ d/ X; X ~ .id = 1,3 A+ l% t" `( h. z$ \- u' j
.dev = {
- G7 h% u* O0 r: s- E& L% } H1 t9 O .platform_data = &da850_evm_tl_leds_pdata,6 | L: \+ d x! q b! r
.release = led_dev_release,
4 g& t+ Y/ U; {, Z* p, X1 \ }
& l5 {8 i3 Z5 ~2 o' ~1 H};
# L' D, S0 W& y& H: Q1 o3 d, }3 K# r; c9 i- Q6 B
static int __init led_platform_init(void)' Y: I, I1 n& W1 ]
{6 K# m2 R; e `) }' y/ {0 @
int ret;9 O& X' `* g; a, R9 i, [
#if 06 I- G7 p0 j/ s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 W ]4 ]% ^% O3 K: E! \) u if (ret)5 I( j. h! k* N1 t6 G8 B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. C% ?4 \, \7 Q% U "%d\n", ret);1 Z- C5 ^9 D! U* u, C: f& b
#endif& e3 A1 p. W% Q" b3 d
ret = platform_device_register(&da850_evm_tl_leds_device);
7 Z; \; z! J$ z$ L$ m/ u6 p6 n. x if (ret)
% q9 {1 c# W7 q p$ e pr_warning("Could not register som GPIO expander LEDS");
5 Q# i D/ r% C& L$ `: F0 A else# y9 D/ ]- l& E/ d
printk(KERN_INFO "LED register sucessful!\n");
$ B/ T/ i, n. a2 r, t
* i$ C$ R. C8 _ return ret;
, _# z: {1 g. P6 z" K}
( T# n: s7 k+ Q$ f6 D% w
4 ]$ `: t# k' Ostatic void __exit led_platform_exit(void)
7 t% ~3 Z6 q* _! ?& G{: R1 _! x& w% i% [
platform_device_unregister(&da850_evm_tl_leds_device);( M8 D# ~! E, T% {: b
$ o* N) k' o3 n3 c6 Z* T% ^7 H" p printk(KERN_INFO "LED unregister!\n");
4 F- r- [- t5 h: }}
7 {. h. @: s8 F5 b2 e X$ \' i1 Q7 _- b3 k% R+ p! F9 }
module_init(led_platform_init);, U+ I5 i! o1 `' H4 u
module_exit(led_platform_exit);! t3 e# M% y1 v6 j& A# F0 v$ j1 `
& ?9 R+ i+ F4 s& T8 fMODULE_DESCRIPTION("Led platform driver");
/ w0 L5 }. i3 v2 T3 |0 FMODULE_AUTHOR("Tronlong");
" r8 H" O& k* Q8 {" hMODULE_LICENSE("GPL");. J$ ~ C4 n, I7 u
9 s( R9 j$ s R; T! _ |
|