|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 c- K3 e7 ?, L3 [. X8 \" h+ x+ P& Y#include <linux/init.h>5 o9 l3 F7 a& A/ b6 P
#include <linux/module.h>6 N* W9 p* {8 [6 S% Z9 ?/ q
#include <linux/kernel.h>
. g( Q2 f' b$ r" p0 X1 b#include <linux/types.h>
( V4 m2 j- C- j& o#include <linux/gpio.h>
4 N# ^5 S) }! l2 W1 I8 w' V% o#include <linux/leds.h>8 F: e* _1 M2 v
#include <linux/platform_device.h>" O, ^+ I! g, r0 R
: |3 f5 U9 O' S7 P#include <asm/mach-types.h> B8 Z/ k; g$ z+ C$ Y0 f0 m
#include <asm/mach/arch.h>
( S- E) Q7 H8 [6 d) P8 f#include <mach/da8xx.h>
% i# }7 \, f9 [ F#include <mach/mux.h>
7 H I( |, v, b$ R) T
}; @( i. D* ^- w#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) l- M" H7 P8 c" k2 ]" F5 N, [. }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: K6 N0 S; X! }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# p) ]- D! }; g& f" y, f, m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' j0 H# O" V+ i4 ?2 n' ?" Z+ \4 w! [/ E4 W
/* assign the tl som board LED-GPIOs*/& o4 [8 C+ T, q) C% @
static const short da850_evm_tl_user_led_pins[] = {; i- u* J+ G" z/ t& j. g
/* These pins are definition at <mach/mux.h> file */6 j& Z- X) j8 `3 l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 Q8 L( R8 @6 o- A4 X7 G7 B
-10 Q7 C4 y8 u3 h/ e0 Y
};7 w# y9 }: T) P+ a( }( I8 C
7 v* j2 z0 d) q" J! g4 F9 |static struct gpio_led da850_evm_tl_leds[] = {' o& M$ Z( j5 _ |- g H4 w
{
. @+ Y" ~7 G0 \ .active_low = 0,
9 N% j+ d$ u+ f6 Z .gpio = DA850_USER_LED0,
! L+ C; o* n( I Z' ?; E3 P7 N" H .name = "user_led0",8 M4 H2 i" ^( Z2 }- H
.default_trigger = "default-on",
0 M1 y8 ^- U2 m9 F# s/ r/ [# j },
6 B; S& d: {2 v: Y( u {
: z& s W9 c' `7 o9 I .active_low = 0,, v1 d+ V0 h" T% t/ B' `
.gpio = DA850_USER_LED1,( N/ ?6 ~7 J% |: u
.name = "user_led1",' _5 P" v0 q T. B
.default_trigger = "default-on",
: z8 X2 P" P' Q8 ^/ Q: X# H },5 J; R5 w/ [) ?6 y; K
{
" R! j( K+ k; x .active_low = 0,
+ w% q* e. a% c$ h9 a/ S .gpio = DA850_USER_LED2,
' r* x% {5 E- H5 f1 z% a _. W .name = "user_led2",
: H1 G% l% [' t# G) \ .default_trigger = "default-on",
* T6 Y) ?% R$ M- X* u- f' b },6 j& N9 ^! k3 g2 x9 V" W( d4 l0 b
{
. q* C$ b; ~) V .active_low = 0, o7 S1 r! L) V, P0 `9 w
.gpio = DA850_USER_LED3,
; ?6 N# N ^6 C .name = "user_led3",6 f9 f6 _* J$ a$ L! f }
.default_trigger = "default-on",- _* |' T0 E( y! A
},2 [: Y$ P) h8 {8 m$ N! Z
};
y' k. w* Q: \6 \( _% g% D5 B* P) i4 F. c& P/ E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( J) x( X$ B7 A( p .leds = da850_evm_tl_leds,
. S% W0 i# \% F' F" w& g5 z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ o* [; N' H3 z/ g1 h6 a/ {};
$ d" I8 w( { Q' S2 ^' s3 b# g1 r# v0 m. ~
static void led_dev_release(struct device *dev)
# ?6 ~3 {5 f/ ?$ q" q! P{5 W1 o) d% O: C
};
% Y1 \# _; ~- d, x" k5 K
$ j6 t# R+ I# I' Cstatic struct platform_device da850_evm_tl_leds_device = {
# j7 s' P9 q, b: J8 k( W) W2 } .name = "leds-gpio",
1 C$ w+ ]) E* l" ^7 y+ P' F) H/ r .id = 1,# t& y0 g) F, ]& f& T
.dev = {7 V. f. Y; T* d# M: a& o, d& y
.platform_data = &da850_evm_tl_leds_pdata, O! {/ v6 G! W& \. O/ j
.release = led_dev_release,
1 I3 h" ]6 ?8 Y' z6 I }" a7 u$ b- [& T* |
};
k+ ?! @9 v3 B* |
6 I3 b) M- u# R; {6 D8 Rstatic int __init led_platform_init(void)% C0 u& f; ~0 V6 p: B* A) a6 v
{
' B; p- M S. [ int ret;
1 Q- G/ \+ G2 O! D B. j#if 0: A0 J+ _; z/ {) g" c* N' }# U7 \
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ x2 N- D) y/ G+ S4 c+ r6 N* I5 W7 e" a if (ret)
9 g3 {$ ]% N& ]2 e+ p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" {1 L6 J1 @, _0 p" H& I' r: q
"%d\n", ret);
1 L- e0 A0 o* I- i6 @# b9 F#endif6 M1 ^: t* N% u. V# ~
ret = platform_device_register(&da850_evm_tl_leds_device);
- j+ {+ x6 o8 r/ @/ z if (ret)
$ c& D' ~' }0 l/ [. @! Z. G% K pr_warning("Could not register som GPIO expander LEDS");0 ^1 Q9 U" ~0 a' n4 }
else
5 w1 K! ~! R% b' P2 _ printk(KERN_INFO "LED register sucessful!\n");5 z( f8 C, Q" v' `+ A4 ~
" y+ _- d+ T* K1 ~; h: @
return ret;+ i: d& Z: j8 [ s, j' ^( S
}
1 Z8 t" h/ ^$ G9 p% [) C% O$ K
) J9 M3 Z" Y# I; r7 Vstatic void __exit led_platform_exit(void)
0 q" b6 C) m: Y! W; R7 k{
2 ]! r, H8 `% z( X platform_device_unregister(&da850_evm_tl_leds_device);. b6 y0 Z; {1 m9 ~/ J, B
6 l( v1 s$ U. y' ?+ o printk(KERN_INFO "LED unregister!\n");
/ C3 K/ l8 t( X6 e" q9 t}
- X) g, {, J$ ]5 ~$ m. V7 K. V7 x
- {4 M' f- @8 K. _module_init(led_platform_init);: `4 H6 q2 E; m/ ~
module_exit(led_platform_exit);
3 y; \; M) m8 C" J5 a4 s( W2 V# E4 X! u3 T
MODULE_DESCRIPTION("Led platform driver");1 L+ _& P5 n1 X+ {3 G- P/ e7 ]
MODULE_AUTHOR("Tronlong");( H2 l6 B* H$ v' G; {
MODULE_LICENSE("GPL");
; \5 `: o1 E( ]' `8 h! ?6 F. S; j2 ?& B" p2 r
|
|