|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* l8 |( [: X1 y6 C4 b) x0 V#include <linux/init.h>
% b4 K& A" \: k# k7 I$ g2 p#include <linux/module.h>1 e6 C1 k5 j8 W2 @& h8 j
#include <linux/kernel.h>
0 G* g3 t7 G) _& |#include <linux/types.h>5 k) U' S" Z3 n1 m
#include <linux/gpio.h>' |( ?, `, ~# Y
#include <linux/leds.h>
4 D+ i' n2 j/ G: |' Y#include <linux/platform_device.h>5 E. \- k r2 L4 t
) e3 D. k5 Y0 S* V4 z
#include <asm/mach-types.h>
1 n! p0 C1 ^2 q# p#include <asm/mach/arch.h>& L4 `( _. w* g* Z
#include <mach/da8xx.h>' H0 }7 G: ~* ] H1 c
#include <mach/mux.h>
) ]& H( z* T( I8 \1 v% H6 v R' w6 |! [; ~# K, G2 U
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 e8 Q# V/ r/ ?( g6 v7 B# A, T#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 s0 n3 K- Z# O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 n" |+ z, F4 q0 _
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 B/ D! M/ j7 a9 Y. M0 `
3 v8 {& s/ O# S- i/* assign the tl som board LED-GPIOs*/
+ a K6 f/ n' @) n3 |- Astatic const short da850_evm_tl_user_led_pins[] = {
# }) [3 C2 E% r9 n5 C- M /* These pins are definition at <mach/mux.h> file */7 p) A. B: P; g+ U) o# J2 a; _3 J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# P1 K4 C3 W) l8 v -19 i M; I+ l! [0 Z+ a+ C
};, k9 B) ]7 P3 c3 g. o: O; E
( E: z( k$ l3 j7 v
static struct gpio_led da850_evm_tl_leds[] = {2 O, a. z2 K( x M; p3 {
{
6 T T$ e+ q5 m( E. r, ~- P .active_low = 0, P' |) X" d m% W# l
.gpio = DA850_USER_LED0,; G4 E% U. F4 R% t/ K
.name = "user_led0",
Y2 A5 ~% A9 c2 x .default_trigger = "default-on",9 V: H2 n; L5 n: z; e: d
},# Q$ L& B, e; Z! z3 k
{
1 {4 r4 a8 N: L9 Y .active_low = 0,; [; z" k& [+ d7 O% V0 j
.gpio = DA850_USER_LED1,
/ ?3 b* X' C8 H! t1 Y) r/ G+ K! W .name = "user_led1",; g! `9 ^; J5 Q( Y. k- O
.default_trigger = "default-on",# B* @' F' B; |* G% e
},
+ ^ j% q. J# t5 K3 s! \$ C {
& O8 j. o$ m! D6 O .active_low = 0,
( X; ^& {6 A m .gpio = DA850_USER_LED2,; O" \0 r0 ]7 V0 n; c* J w
.name = "user_led2",
2 B0 k* ~/ d/ Z* e" d' [ .default_trigger = "default-on",. b4 [) g) A, M B" A8 U* U. @
},
4 T/ L& r# b$ u# j {+ Z: R( Z0 j% \* ~4 x4 Q
.active_low = 0,
) \$ o4 q. Q# B+ B N" b .gpio = DA850_USER_LED3,' X0 k M8 [3 X0 A' l' q
.name = "user_led3",3 i7 [. w+ w( i; M, ]1 f
.default_trigger = "default-on",
; @; l, W/ q# K. v7 q+ |4 \. _- Y },
! b3 u& {7 c0 b& A/ W};! N) k( p. E, c5 f3 U
# A; u; W0 q. n, D# j0 z1 Xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 H# F; s! L! }8 F/ Y3 [) a d
.leds = da850_evm_tl_leds,1 `) N; [ V) q' T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& b5 r9 p" F/ Z, S5 s" I" Y
};
s: i6 _8 \ ?; |5 J, X, ^$ w2 o. z, a# n6 k% e. J# \
static void led_dev_release(struct device *dev)
$ u( }2 A$ T0 O, W3 Q{* }! x1 s& i. E( w/ Y/ ?/ N
};
6 @) y. W9 ^% ^
/ p/ z$ E. q6 m1 S ^$ }static struct platform_device da850_evm_tl_leds_device = {
6 H% d/ o7 e, i7 ~; r- J$ _ .name = "leds-gpio",
* T5 W0 H' ?8 n .id = 1,' [% U4 E) ?& S7 W! X& ^; e
.dev = {
2 S$ Y% J/ z7 E .platform_data = &da850_evm_tl_leds_pdata,
5 m: W* J8 Y* L% a .release = led_dev_release,8 W9 ?2 K! a) a- \' T* z
}
3 G4 \" ]# C' [9 u. s};) ^' q1 ~* {* p4 o. F4 T+ X
: Z! C) ~: j, Z: Mstatic int __init led_platform_init(void)" d" f, r) Y, z- c7 T4 o
{
& v3 r7 B8 j$ n% v# A) d* V: h int ret;( T( i9 z; \' |; i1 D! Y5 i
#if 02 L2 k* j; B* F! l; Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); D0 P( N b) K8 C
if (ret)9 m. X! O- ^! s. d' @0 q4 l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 q5 X8 A) [# e# s* p+ y) w
"%d\n", ret);& U; d- x: ~# M' j3 }7 }
#endif
, C$ Y5 ?! w) ? ret = platform_device_register(&da850_evm_tl_leds_device);
' X0 _ w8 U2 Z4 F% x+ T if (ret)
9 y9 K, \+ l7 R8 H# Y; s B- K pr_warning("Could not register som GPIO expander LEDS");: W1 v) K- { J# d& C
else
6 {2 l4 U) c+ Z6 r, [/ U& U printk(KERN_INFO "LED register sucessful!\n");
# _! ~5 }0 J0 ?" e5 }8 s
. K' [( r/ {; V! F' j return ret;' W d( P# w; }, v; l! J" u
}8 e1 }4 u6 N" i* P& A# j1 F" ]
( y9 ?' ?7 v: fstatic void __exit led_platform_exit(void) ^8 q% _9 s. Z% a6 F
{
- K1 C: i- {# z8 @& s1 `' U platform_device_unregister(&da850_evm_tl_leds_device);
; V% q5 X Z0 E$ m' k# S/ D9 `, c( v3 J* t2 \+ K
printk(KERN_INFO "LED unregister!\n");$ V" }9 U" {4 O( h
}2 O; i0 y# H# p" d
2 J3 h& g6 F8 g* e( o9 Vmodule_init(led_platform_init);
% D$ | B3 }' J$ H( Pmodule_exit(led_platform_exit);
% V; q) O C) E7 @: c% K8 c) ?1 `! X! U
MODULE_DESCRIPTION("Led platform driver");3 g: R. n; y" v, T% ~. e
MODULE_AUTHOR("Tronlong");
5 t8 L6 I4 Q3 i7 e; hMODULE_LICENSE("GPL"); U# H. J: Y, [4 j" X: _
2 }' s d' i( F$ v2 {) y2 c7 n |
|