|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" b B, ]3 G, n4 h: Z4 B#include <linux/init.h>( O# Q' ^1 d' m
#include <linux/module.h>; ?6 `% j; K. [& ]
#include <linux/kernel.h>
- L) h9 R1 Z5 M* x0 P#include <linux/types.h>
. A# v! v3 i$ Y" p4 a) Z- Y; u#include <linux/gpio.h>
2 W2 X3 g/ F- h+ K#include <linux/leds.h>2 k6 y8 w4 Q$ A( W+ v; Q
#include <linux/platform_device.h>' b. ^( [- E7 C6 S) o9 y2 {
: w" S( g1 U! M! K7 i0 { p#include <asm/mach-types.h>3 ~2 g" X+ i. `+ `- m
#include <asm/mach/arch.h>7 H; \- Z, [# H9 Z" d# ^, f& q
#include <mach/da8xx.h>3 h( b/ j* w4 R. n: m
#include <mach/mux.h>( Y( N& l* O3 e {; s* g
7 j2 P% O3 t% F' f#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ D9 d! C9 E& t0 ]' Q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& {% h* l s% l& B#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- ?& m- l# T# ~: C' H9 o: R9 e8 p#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 _% y6 c, B9 G) w5 A
9 p* h0 \: _0 f, Q5 ?/* assign the tl som board LED-GPIOs*/
; x* J- x: T* S" @ J- Ystatic const short da850_evm_tl_user_led_pins[] = {, z) G9 T) W) u" @$ l
/* These pins are definition at <mach/mux.h> file */
/ H# ]" V5 f9 }) ]+ H DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ ^& R1 ~5 l1 C" D1 O4 z
-1& V, A2 k8 A# F8 f' r" f
};
+ m& c* E* C5 e& p! l" z5 W# ?8 I6 x& U
static struct gpio_led da850_evm_tl_leds[] = {
& D& V# _) r, z: w! Z {( U8 ^* P6 G. Z
.active_low = 0,, s0 _5 {7 R& ]6 x i7 ~
.gpio = DA850_USER_LED0,- F ]. J3 R4 ]; K) K6 H
.name = "user_led0",
3 N1 j9 O$ R4 n .default_trigger = "default-on",
; u( O4 ~; t1 O! x9 t0 u },
# W( |( B: L# H7 n, p# j {
4 ~- p' Q* v5 S* z# k# y; E .active_low = 0,
' s8 }/ C5 Z1 R/ F4 G .gpio = DA850_USER_LED1,
, I$ l2 b7 q8 N' y- Y5 ~, M) k .name = "user_led1",. m4 Q+ q3 P+ A4 ~# l$ n* e
.default_trigger = "default-on", e/ a5 Y) x% [% X9 B" |
},4 c, R/ c S; n9 a. \
{
& ^7 o/ x) z0 G( C) ?* o .active_low = 0,
k/ j& W! \' C .gpio = DA850_USER_LED2,
9 R8 T/ s6 o# G' v. b/ h+ b) k .name = "user_led2",
b& f0 I6 v% w1 U6 l .default_trigger = "default-on",
7 _; a- |- R" I9 [: i( o' }! H, A },
2 K& {$ i+ c5 ^: n { j; O% {1 P& h/ X8 z7 p
.active_low = 0,
4 @: K o" U \/ ` .gpio = DA850_USER_LED3,
( k2 v( S+ ^5 ^6 u1 | .name = "user_led3",8 n& |; \: Z7 U" o; u
.default_trigger = "default-on",
( J+ x: y/ s; {$ y6 f+ F },
, R9 E: {- s& ^" L+ H- s6 B: P};( Q% j. U$ X0 t& X6 v. r
& `! V; @; A* ]# K# K2 Mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 S) E0 T( M4 q/ Q, { .leds = da850_evm_tl_leds,
) K# h* d5 n }: S7 W4 ? .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. Y8 S4 K0 J+ y, S};) B* e, ]- Y% E, }1 {
$ m* w7 `4 i/ z& D, |static void led_dev_release(struct device *dev)
! t. V5 B/ ?) k- Q% {* u' E{" P4 b2 |6 y; D9 _
};: e1 }4 h9 @7 B: U
4 Q. c ]1 P( J, z& q0 P+ s
static struct platform_device da850_evm_tl_leds_device = {6 F: h+ W! M! g" ], M
.name = "leds-gpio",
& G0 w7 D5 \: H, ]6 {' i .id = 1,
" i9 T: w- {% L+ @8 H: X/ R .dev = {
; f1 c( \& i. h" Y0 W; \+ Y .platform_data = &da850_evm_tl_leds_pdata,
d# Q5 U5 b. c8 M; [ .release = led_dev_release,
" x2 X: v) p" {' Q1 f }6 _4 M2 v' F2 S8 t
};
- {9 I1 n8 T& k
+ q( G( k& U) \, u( ?' S, Zstatic int __init led_platform_init(void)# e& w# u5 f: N! T& _6 ?
{) q4 E9 S) X! _, S
int ret;
. m! g6 b' j# z" u! X: e#if 0! J9 w2 n" A' i
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ W, z# k+ V5 ~. K, } if (ret)! {' A5 n4 J* X$ Y0 G
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") z* A. B; R) K0 q1 Q
"%d\n", ret);* e6 J2 }, t& u" X4 ^) b: d: H
#endif
H" T U% n2 {: h3 r4 o7 Q ret = platform_device_register(&da850_evm_tl_leds_device);, e$ ~6 U, Y$ n0 \
if (ret)- N5 a+ t+ k" T- [$ Q4 x, e
pr_warning("Could not register som GPIO expander LEDS");; k, D( O8 }$ @5 x3 h
else8 v( d6 ?! F' T
printk(KERN_INFO "LED register sucessful!\n");' u: @! o7 b+ C( K
& ]7 v" t$ Y4 {4 r, g6 Q
return ret;/ {, A2 ?1 T& O8 T! q, \% n& s
}
8 M$ R7 x+ c4 x: P& q- C1 Y
, p/ z5 A F+ d6 U$ T; Rstatic void __exit led_platform_exit(void); ]% }7 e; o6 N: \
{
5 |$ E7 D/ W* J# p% x7 K platform_device_unregister(&da850_evm_tl_leds_device);6 d8 c: z0 E8 t& ?7 |
: e: e) `5 k) m; \. X
printk(KERN_INFO "LED unregister!\n");
6 q7 x" F/ ~* J4 Z$ z6 O}( l9 B# G* S' H# k9 t" E; O
8 ~- x) N ^9 }9 \2 l2 W
module_init(led_platform_init);
) |8 Y' i9 V( p; U1 G/ ~module_exit(led_platform_exit);: l- {! o/ x: b3 N/ K8 y
7 O, A _) _7 t. w3 n' ~$ ~MODULE_DESCRIPTION("Led platform driver");) g q9 W9 u9 n8 D
MODULE_AUTHOR("Tronlong");& }: W" X% O7 x$ @
MODULE_LICENSE("GPL");
* q5 e8 B- o% n, i6 S" J
- O- Y- Q. X0 o3 h' E4 z |
|