|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ G4 Q" G/ X: e3 P& ]#include <linux/init.h>
6 M. b9 b) x% {& S: M* q1 t#include <linux/module.h>
; ]) v5 H) o9 J) x6 r8 G7 Q#include <linux/kernel.h>$ U+ T( {' @+ M- w! m
#include <linux/types.h>
5 P; l% l, h: o- C' ?#include <linux/gpio.h>
% Q' O5 O, j: N- v#include <linux/leds.h>
! I/ s5 K! K: e0 H% O% t+ F$ S$ b#include <linux/platform_device.h>
8 X' Y) u+ P1 J4 O& J8 ?8 _1 z, h% K+ p) B
#include <asm/mach-types.h>
' [' |+ l0 Y0 c' p. y( v' u. I#include <asm/mach/arch.h>5 U# ?. o' f/ @
#include <mach/da8xx.h>
( h% O# S. a& \" \% l#include <mach/mux.h>
2 ~& [% `6 X8 n7 i; L/ @, K
* r0 Q+ w/ X0 Q$ T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& _( A( _. u7 P
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. r: {) g8 c2 k5 H7 I2 _#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ A. V4 E+ d4 d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" H: J4 `7 O1 m/ C0 F- ]' V
, N( V" ~. w/ @8 }
/* assign the tl som board LED-GPIOs*/8 G" Z* x, W& ~2 D. c n
static const short da850_evm_tl_user_led_pins[] = {
+ c! j/ g- t& `$ d /* These pins are definition at <mach/mux.h> file */
& @, z- l# Q% p9 q! }1 t7 T4 s N( q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* H" v9 h) {* Z. H9 l/ ~
-1
d# r+ F: v5 l: `};
6 y7 n2 {5 b( N6 \9 J. H! B) F6 Z( J6 t1 s( b S! R, l
static struct gpio_led da850_evm_tl_leds[] = {+ F `+ O9 I6 g7 m) i8 W
{
6 o# e' v# z, @ .active_low = 0,5 T3 X! L9 P) q) s
.gpio = DA850_USER_LED0,
2 l9 P- u6 F" c F .name = "user_led0",
4 x6 o q8 _( G) z5 t$ m0 a$ F .default_trigger = "default-on",9 s. @0 s; V* \3 F3 x6 f
},
; v6 A; {* S* ]/ R* Z. c2 @ {4 c% v( I1 P, `# H5 V- u6 J
.active_low = 0,
0 @6 D8 Y1 B. R5 N9 r0 p# F+ O .gpio = DA850_USER_LED1,' G$ B/ d4 B: B1 Z5 `
.name = "user_led1",
0 a- h, s% Y) G, P& B) H$ F8 d .default_trigger = "default-on",3 m: C/ @9 _1 i+ O$ T3 w' [
},
# ^" Z ]' r' H" c8 c0 r, f {* A; A4 U" }% z
.active_low = 0,# ^8 }) h# U; b$ G- ^
.gpio = DA850_USER_LED2,
8 i* ]' _4 H3 A8 X .name = "user_led2",
9 L( i$ ~8 T9 C; n; H% ?& A .default_trigger = "default-on",
: X$ O0 w2 Q6 }2 r0 ^( o8 e( a4 H }," c& S1 ]4 j4 {1 L' U0 d
{$ V, d7 ?& {1 Z; `5 F8 ~
.active_low = 0,
4 d' ]" [2 L* g$ x/ N8 ?/ J" v1 F5 l .gpio = DA850_USER_LED3,' ]! W* B' q3 m Y, A
.name = "user_led3",
) {# T8 D7 \, g* Y& T+ y& ?2 K4 @ .default_trigger = "default-on",) J# \! e7 B7 v
},. S7 B1 C3 E: \
};" u; i9 ?% A1 i
4 n) f8 w$ f; j! F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# ~- P+ \) d' I .leds = da850_evm_tl_leds,
5 o. ]$ Z' E) P! X .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, j. u6 d' g6 S2 f4 ?};
) T% I7 N; C: d1 h, H
5 j, @$ q6 F3 g# r$ A! ^static void led_dev_release(struct device *dev)
% m$ u8 W1 k, r' z. Z7 g{$ C- [/ J! |/ _9 Z$ z7 M
};$ o! a. y R6 W6 }$ S& i
x# b5 M: v8 M% q
static struct platform_device da850_evm_tl_leds_device = {$ S# _8 v7 J/ K! f5 ]' J
.name = "leds-gpio",& b$ @: @9 F$ P2 n
.id = 1,
% s0 u' l& t8 n0 P: ` .dev = {# Q' g7 E! {3 E) x
.platform_data = &da850_evm_tl_leds_pdata,1 r1 r3 z3 B* g& s/ {
.release = led_dev_release,0 @, F" a" M" z& A7 k
}
6 o m, i( W9 F) s6 v Q \; `};
; P+ i0 ?0 @) _3 C6 Y6 A8 v" f$ s3 q
1 R- j& R9 ]5 w" n% [" l# a- \8 pstatic int __init led_platform_init(void): u* C. o: A0 Z: D, y" M/ M
{' c, U& F: e. v0 n. [
int ret;
: Q+ V4 J! c5 l' j8 p" n; z5 \#if 0
8 D9 I C7 z; P* D6 E& W; T9 u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 D. N0 L G- O* D1 N4 N6 I
if (ret)# S. q8 g& E3 N! B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! T$ _ w* M* x9 |+ |) V% p
"%d\n", ret);
! [ \* a6 p! S6 R# U#endif5 E8 [" E0 N) W0 ^- Y
ret = platform_device_register(&da850_evm_tl_leds_device);+ {9 M4 V2 C+ h) A8 U0 e
if (ret)1 G0 v1 ]+ P+ K+ }7 ]6 k' o
pr_warning("Could not register som GPIO expander LEDS"); _7 L4 ?! @& I3 p$ `
else
K8 p* o7 k. H printk(KERN_INFO "LED register sucessful!\n");/ `7 y. Z4 {7 Q& h o( @( z
9 ^1 e2 o7 s6 Q( L return ret;
) f3 f/ P5 W7 e& [}
: b* Y* S% ?9 u6 e c& e/ p# q+ K* L q7 f/ P1 `# o
static void __exit led_platform_exit(void)
$ D, M0 O6 w2 V+ M! m{4 X9 d; a: d$ |- i6 C4 {
platform_device_unregister(&da850_evm_tl_leds_device);
+ j1 y4 K; F& k0 ~. a, \/ w
( _4 J6 t. j" I% M) j, }5 k printk(KERN_INFO "LED unregister!\n");3 M0 q1 `% x- Y" \% m( N
}: n. y M& V9 k; Z1 x# A, E3 g
8 A( D" H1 B n% x; Y8 k! E) mmodule_init(led_platform_init);! W2 W5 [2 G+ g- R* _: ?. m
module_exit(led_platform_exit);
1 O# s" w* b2 N6 y6 O
, p6 A9 L+ p7 \- FMODULE_DESCRIPTION("Led platform driver");
- s/ w$ g: K( }/ i3 D ]8 n7 JMODULE_AUTHOR("Tronlong");6 M# a! n. W3 ^/ M
MODULE_LICENSE("GPL");
3 q4 e B: z# p1 I2 d5 C& ^. R2 K
|
|