|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 o1 ^4 j9 \# ~% g3 A5 j#include <linux/init.h>9 u6 ^% N. Z3 ~8 K* I4 E$ o
#include <linux/module.h>/ f( z/ u/ ~. {+ v
#include <linux/kernel.h>% L; q7 n* W: L, p' t: w2 F
#include <linux/types.h>" e, t+ A4 ?4 E, E
#include <linux/gpio.h>+ B( d: _: |! d3 v
#include <linux/leds.h>
' a5 M, H7 S: R) |/ E w& }#include <linux/platform_device.h>' T. ~9 g& @, k- i |
4 w7 r5 @- e- \; g4 v% v1 L
#include <asm/mach-types.h>
- r, m- }& @& l7 z# c( q#include <asm/mach/arch.h>1 X+ f' F/ J& V6 C% `" c: i
#include <mach/da8xx.h>
8 T" X3 d# N o8 l#include <mach/mux.h>
* \3 i, n# `( \8 ~8 j
5 I0 w1 b4 u8 @+ h' [. U, q6 s; a#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# s5 G7 q. _$ u( O. y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 a+ }% J. ~! |; l
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 G6 V3 R) K; V- w) F) D! k) Z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 k; b0 r3 i G( l1 `7 _0 @2 y0 z4 {, k3 b
/* assign the tl som board LED-GPIOs*/( c* H4 W0 D: h/ N, \( G* R
static const short da850_evm_tl_user_led_pins[] = {, y: f) \ @( H% a( k; [+ A
/* These pins are definition at <mach/mux.h> file */, k0 b* i2 ~4 r+ ?4 |6 J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' y- ?+ J7 _* @
-1
1 G: F5 _! E7 w};3 Z6 k) d! ?7 x; t% C
+ A+ V. v5 d2 z2 @, t# i
static struct gpio_led da850_evm_tl_leds[] = {4 i9 V1 R; u3 |/ e" P4 K( T d
{
+ x2 D3 a9 g# X" Q5 h& Q .active_low = 0,, j* X6 I* N, Z: D. z" D
.gpio = DA850_USER_LED0,
; L- V0 r, W9 Y .name = "user_led0",0 P& U$ x: Q3 Z* y! x" _1 V8 N O3 ]
.default_trigger = "default-on",
4 @' o& W6 D1 J6 m8 [ },
3 b8 x" d9 B% n* [4 [ {
! }2 K) ^$ d5 t+ ?5 p6 n .active_low = 0,
% K, u2 |4 p/ G .gpio = DA850_USER_LED1,$ ~6 W; o* O- b, u) L
.name = "user_led1",9 N+ g0 L- I/ h3 ]# [
.default_trigger = "default-on",$ G# ^- h, t# n) ^
},0 H# j* V/ h$ A6 m; n
{& f; S4 y1 ~, W5 e% B# k
.active_low = 0,$ @0 q1 K3 u6 f. y1 Z1 j. ?
.gpio = DA850_USER_LED2,1 c) o( l) G3 N6 S
.name = "user_led2",
& \# k/ m- P7 M0 d4 I: M .default_trigger = "default-on",
4 X0 k7 ~0 U6 h- r& X },* K+ P& W# e. A
{1 |7 O. G& m! e% B# p5 r) \. m
.active_low = 0,
- ~: W7 X% f* h; ~* }2 G: F .gpio = DA850_USER_LED3,3 C( [% n0 o/ _) }# ~
.name = "user_led3",5 _2 B& j- ^' T. w3 j0 ^3 s: J* v
.default_trigger = "default-on",* d2 T/ E3 W; o- u! _5 M# O
},
* V3 e: I$ U1 q, T};
4 I3 H( i4 i+ B/ u+ U: P
) d! |! S' I4 K% ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 U# Y |. d& x% }+ n. M .leds = da850_evm_tl_leds,$ k! P0 p3 l g) G& b- @. `) Y. k
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," Q9 L* h, v: P! A. w3 S; |) `
};7 _- {6 n5 |3 v7 z+ S' f
0 G3 l0 D0 Y6 J p
static void led_dev_release(struct device *dev)" T0 N8 X: O5 x! x* b( b2 W# m, B
{
% O0 Q" J" D$ B9 K8 v7 y* \1 g};8 ^! q3 s$ w% h
6 { x$ R, N' g+ c, R8 Nstatic struct platform_device da850_evm_tl_leds_device = {
3 L3 z: z0 r" A0 Y' z) u .name = "leds-gpio",% S, \1 |# t7 C) ~* n
.id = 1,
7 k U% @ K2 B: g" S .dev = {
0 S. b" x) I+ }0 ~, k .platform_data = &da850_evm_tl_leds_pdata,
! m. ~- x; d( p; Q& w( i .release = led_dev_release,
S- N/ j/ _- r! m }
( r" d# z& f h};5 u3 |8 D8 B0 ~# B8 M
7 b% k* I/ \% {4 q* h' u$ Estatic int __init led_platform_init(void), \! @8 W8 A. S5 N, k
{
/ h+ Q. M9 h2 }8 M$ w' K# ]7 f int ret;
1 f3 S, W/ h8 a, _# ?#if 0$ }% Z- ?4 a, `1 _. s8 v( P
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 o; Y/ p5 j( v9 Z) a
if (ret)
7 ?6 X! j# p! I% k0 G; c! D) A pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ H$ w8 n' e3 d. c "%d\n", ret);8 B# B5 _: d' u% a
#endif
) J& ?, E' a% o ret = platform_device_register(&da850_evm_tl_leds_device);
" u$ S' o# k6 ]: w2 n if (ret)7 T- z6 \, {8 @/ ?5 e
pr_warning("Could not register som GPIO expander LEDS");
& l& l; ~( K w9 }% \$ e else
% H- H; W, o' `" } I+ E* W6 ]2 y, k* U0 \ printk(KERN_INFO "LED register sucessful!\n");3 @! i& {6 w. e8 s. v* l
) F; g* H/ z2 F
return ret;
. ^5 @( r! ?2 _' Q5 a5 Q( U}& _; g9 W+ j ~+ J8 z- `
! z8 G2 Q8 [& c2 ^static void __exit led_platform_exit(void)/ g, A7 q* C% }/ K2 z8 j: k6 k
{
! f4 V0 d/ u% ]* M7 z4 } platform_device_unregister(&da850_evm_tl_leds_device);
5 a4 F n5 t$ ^6 [4 Q; M$ J4 ] |' O# B9 ?- c
printk(KERN_INFO "LED unregister!\n");9 {- {" s- p; m; K I* h
}; n1 D" }: ^) S3 t8 u0 ~6 m
6 K8 v; f* \$ M; B: W
module_init(led_platform_init);
$ C4 o) Y5 ^& c8 p: Gmodule_exit(led_platform_exit);/ F( u: R/ R5 b5 ^8 B/ ~. Z
5 p# G8 i; `5 P W- Q* t/ N
MODULE_DESCRIPTION("Led platform driver");
$ R! S3 V1 M' o, [( GMODULE_AUTHOR("Tronlong");
* r0 F+ H, J% J8 P3 K4 XMODULE_LICENSE("GPL");8 w* ^5 o# y+ z) N4 A" I
/ \6 Y" e0 f* h. T. ]
|
|