|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 c% g. J2 t6 z% ?. Y8 N2 p: D6 d4 Z#include <linux/init.h>/ s8 Z5 g3 U. C" K
#include <linux/module.h>
, K6 l3 `5 {9 [1 D% u( J3 p! I#include <linux/kernel.h>0 p2 u4 q+ K- J2 M6 E% S; z
#include <linux/types.h>- J8 m' J+ `3 B U$ x( e2 r/ E
#include <linux/gpio.h># B) c8 k: Y, F6 `7 k$ u' a
#include <linux/leds.h>
6 [* t: Q8 [' A. x7 O7 ~#include <linux/platform_device.h>
+ ?+ d {4 t O/ ~: k4 n5 d# t3 q' f/ I) z+ R
#include <asm/mach-types.h>
. x6 k! w0 O/ z8 H#include <asm/mach/arch.h>
3 o" e- e/ K& ?7 D; B, z5 G7 I#include <mach/da8xx.h># [ p5 V% A8 T
#include <mach/mux.h>
" g8 I" H9 P5 X, E/ _# b8 T% g" o6 c% p2 v" }
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 t! r9 V% Q( \) l& S4 ?9 I4 y; j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) R( r H; t) A# T- Z) a
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); z3 G& w: k5 I1 i; n% e( \
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 x5 g3 O2 O6 } @; K$ {
8 X; i1 _: z6 f! d4 v
/* assign the tl som board LED-GPIOs*/
; b5 M( G$ u4 d- N+ B2 d" {# }: c+ K i, vstatic const short da850_evm_tl_user_led_pins[] = {! n( ?/ G. i) O
/* These pins are definition at <mach/mux.h> file */
9 E5 ?) N) f1 x: Z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 f* ] o: k( r- Z
-1/ U, `$ Q4 c* ]
};
! Y t& }* {1 m6 Q, `. H* A5 S3 g' h7 Z$ t5 l# ~" ~
static struct gpio_led da850_evm_tl_leds[] = {
1 k: b) ^3 L z) z! m! x {
4 J, f b$ ]0 l .active_low = 0,
! j5 S# X4 f" ^' {: Q- k .gpio = DA850_USER_LED0,
/ Y+ O: `9 B5 [" I& O; y0 O" Q# \ .name = "user_led0",
% a* I% [: E# H. u2 O2 Z# W .default_trigger = "default-on",, G9 k0 i3 q$ u& M( [! a( a
},) T/ M) @8 l; r1 }7 i1 I5 s
{4 s: N3 C {* ]' f+ x9 J
.active_low = 0,
: N+ u0 l% K$ Y$ s: A$ [6 A' C .gpio = DA850_USER_LED1,5 d: n# Y0 V+ P; o6 s- N
.name = "user_led1",+ _* q, n; K, e4 G4 c
.default_trigger = "default-on",; r1 V0 C& d0 Y o
},- B, ~/ H, v9 o/ X ^* Z( e6 h
{
4 \" @) S" ]: V% n: u& v .active_low = 0,
) _; v ~$ g; R& U8 U2 N; {7 O .gpio = DA850_USER_LED2," y0 G8 Q) P2 H% D6 ?
.name = "user_led2",
" g8 n8 x# Z8 \) A .default_trigger = "default-on",
# L* ]# x- Y9 M, M! w7 U# D" W },- ?: L) z: N! {. }
{! E# \& T, G3 y3 n6 F
.active_low = 0,) B* Z) Q- b; A& R( o
.gpio = DA850_USER_LED3,
! g0 P( Q: P7 |# u .name = "user_led3",
" Z4 v( Z7 a2 F4 h: Z .default_trigger = "default-on",
, \7 g( V; o" H4 T* l7 P },6 A8 [" Q1 n" D1 K
};' [8 c. E& m. u% {) j! A K
8 @- Q; J/ r7 j" f
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) o5 |5 u) y! x8 s+ E* B3 f
.leds = da850_evm_tl_leds,
8 `! j8 s0 ~2 X' _ {1 | .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& i% x! n/ v1 ^( q& _( O
};
/ C: c3 E1 Z( h# k# M3 @" ?9 F! j: S$ W* W' v. Z5 O
static void led_dev_release(struct device *dev), _7 a0 u/ L: o( ]1 A- ?* T8 q
{$ f1 ?- J# S) c/ U9 |) c0 d
};
4 C" l, B* o3 P7 n7 e- u7 Z, g& r: l y( P( Y- M; z
static struct platform_device da850_evm_tl_leds_device = {
/ s( x3 M! @' i, g1 \: D1 F .name = "leds-gpio",
8 T# |5 r1 @. g P/ n .id = 1,: o/ ~1 |! o; H9 K
.dev = {
. R s2 ]( p) q1 D& J .platform_data = &da850_evm_tl_leds_pdata,
; L! I- U2 {* c# W( e .release = led_dev_release,% X% P+ K1 P2 }, d
}
5 _ h9 Z* i. t ?- g. ~% {* y};
! B; U: H4 |5 D/ l% h; |
! A$ e% f- O# r2 O* M( gstatic int __init led_platform_init(void)" N4 N) Y- P, R0 {% \5 {: M# j
{, M, B; B0 L% o, o
int ret;' L6 O( e3 O# d7 z. g; ~" h; G+ G) s. V. ^
#if 0
3 c4 p8 E) j1 s: g5 Q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) N L6 p4 b Y$ `, q |
if (ret)
/ ~# N6 D5 t9 O7 r7 N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' r9 l- {; p4 B* q) c# b F
"%d\n", ret);
@& F, ^* J& J" F- O" a#endif
; ] b2 @2 f+ M4 W ret = platform_device_register(&da850_evm_tl_leds_device);
. {, w2 u% l# }5 W/ X% Y if (ret)3 h* s- ^; {. b; j3 t
pr_warning("Could not register som GPIO expander LEDS");/ B) M9 T4 E4 \( E7 I- N
else$ m% f6 ^8 T- ?" K. {' _2 F( T
printk(KERN_INFO "LED register sucessful!\n");3 A( H$ b/ J4 k. |% y
s( g" {) l# b
return ret;
) y. s$ k- g' s) Y}0 b: W6 t8 r* ?9 ^5 J) J
+ Y6 e) t9 u p3 K
static void __exit led_platform_exit(void), l, e; C: t( I5 a: S# E
{
/ i; t p, q+ n# D8 |- G platform_device_unregister(&da850_evm_tl_leds_device);7 F( \! Z; d# t! I+ R/ j% m, a
. ~& d' f( j: r- X. M- N printk(KERN_INFO "LED unregister!\n");7 f& k3 h n9 N, L
}
1 {3 Y2 ~( y: F1 ?! `% x+ z8 ]
. j a/ N2 j. ]1 @1 r y- N1 _module_init(led_platform_init);3 Q! T! A1 ~! v1 l* @ O# j/ X3 F0 g
module_exit(led_platform_exit);& I0 ^3 [. i$ S2 O. ^. z9 n- M: f0 N% u
% D. N+ V' j. Q l4 ]3 {
MODULE_DESCRIPTION("Led platform driver");* U# \( u. c; p
MODULE_AUTHOR("Tronlong");
+ T: Q. @6 v* c: d. c/ V* u) bMODULE_LICENSE("GPL");
* H# n: G I/ j0 }" q' L/ _# W% R7 {2 K8 L
|
|