|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 R' y8 f* ^: [
#include <linux/init.h>
% p/ h# G- O4 H#include <linux/module.h>4 K+ j2 i5 a5 U" K" \! o) Y% E
#include <linux/kernel.h>
3 P, Q/ X: N2 H5 J/ ?4 N#include <linux/types.h>1 N2 a W6 j( Z: [( d
#include <linux/gpio.h>
* A3 k" P' t, `9 b0 u#include <linux/leds.h>
. M: P: \) T. A/ O( U6 @4 o+ J#include <linux/platform_device.h>8 K; d- }. {: T/ r$ y8 B: e! V
& ]+ q$ M0 o4 O8 M6 V) w/ Z2 A#include <asm/mach-types.h>) x$ E5 O: o2 ^4 ~2 ~/ `/ Y7 G
#include <asm/mach/arch.h>
' h B/ E* ?/ g7 m#include <mach/da8xx.h>. a3 n: i- `% _( m
#include <mach/mux.h>% a; t6 l0 d) ^- D. B" W
2 t( I$ \" U8 H1 g! h2 _# w/ ?
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 E. S9 N4 Z; |. c3 ?, }8 Z- i" M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" r O3 _) y% _: }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& I! W7 y# [- F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 v& K# ?* X/ @8 d! {
! i, `; i2 Y& d8 y/* assign the tl som board LED-GPIOs*/
3 n- E6 o; J3 t% c% vstatic const short da850_evm_tl_user_led_pins[] = {3 n4 P4 E9 N6 q2 I) ^' `1 l* W; z
/* These pins are definition at <mach/mux.h> file */
) o/ a, k/ B5 V DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 W. C! ^9 `8 F6 O5 s! \
-12 [: y! c7 v" D+ H: i9 l- O) y
};0 N$ _; T- R8 y$ R' t; O t
4 J# h4 D4 t$ Y% M) G
static struct gpio_led da850_evm_tl_leds[] = {
9 u7 g: Y- W/ k {) @3 g: g1 H+ ^/ a- L, B7 o
.active_low = 0,
+ O! ^9 r1 e! y+ k, j" g1 T .gpio = DA850_USER_LED0,
# {, `7 R& n: X) w* p1 A) D .name = "user_led0",- G" u/ b2 c: U% y) V
.default_trigger = "default-on",$ l" `8 ^4 h4 H+ }& ^
},
/ ?0 D' j0 |2 N {
( r0 [/ q5 q( V% `" y$ j8 n. | .active_low = 0,+ p# ~- p6 R7 ]2 \$ }) A8 D9 C U+ L
.gpio = DA850_USER_LED1,6 h I2 D, k- |# z u- J
.name = "user_led1",
# h; K4 [2 s! S0 j" ~5 P .default_trigger = "default-on",& c+ w; ]" j! d' P2 T
},' M. R# O9 W/ S) w: [, w# F% z
{* Q. X* p8 _/ y1 E+ t j
.active_low = 0,7 x" i: n O7 Q& }6 Y: `9 n, |
.gpio = DA850_USER_LED2,
6 \+ u2 T2 A; P4 P g( W .name = "user_led2"," E* `$ ~2 X2 I
.default_trigger = "default-on",
/ ~/ R' I: T! f- C3 b },7 ]3 w) d, M( h6 G
{2 T9 ]* u8 B. o" i' Z8 b) @! b8 }
.active_low = 0,
* ~( A! T# r7 g4 E G' _ .gpio = DA850_USER_LED3,( F8 P; r# f* g7 T& ^2 H
.name = "user_led3"," x! T; a3 b1 ~& d" s+ a
.default_trigger = "default-on",
! R/ m$ K0 i3 \3 n# @9 D },* l" F+ U! O- Q$ X- U) }. R
};
% e; X. K5 c) [. Y( ` |4 S
: F) X) g+ Z, t3 H# Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 N. `: G9 r: [6 B* {
.leds = da850_evm_tl_leds,
8 A( M; V x5 V5 R .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; w5 D# V; G/ _8 n
};
1 f+ R( H; D: q& s: D0 k; I: o0 R G4 W+ L& g) u
static void led_dev_release(struct device *dev)
/ M# N/ }- ?8 s- p{
" _& D4 e+ L" N- F};
& h, g8 `: U0 u2 N- d" O8 I1 N# B/ b; V2 c
static struct platform_device da850_evm_tl_leds_device = {3 b5 z4 h; [* j2 s u D( O. f
.name = "leds-gpio",
+ a5 o7 t! u( ]. m$ Y- H .id = 1,' k( B+ b0 i" s, v# @1 m6 y
.dev = {8 u' i# c3 J: w1 U% U# q
.platform_data = &da850_evm_tl_leds_pdata,
9 y& u; ~0 H2 H+ ~$ ~( _5 D$ v .release = led_dev_release,
5 R6 Q& s3 e5 s& K3 S, S }$ q/ b, W# f: O1 K
};
7 [0 T( \! N- S( P. l
! m s( D1 H5 Y. lstatic int __init led_platform_init(void)
/ f4 T# ^8 K8 b6 K4 _- M{( w3 _. m* R' P d% i @
int ret;1 f" |& b7 @2 s4 [' e
#if 0
2 e& i) b: `* o v ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* n. y9 Y1 v' M: p
if (ret)
; b0 L# I# M6 m" O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 R7 l( b! X+ E: o1 Y8 J
"%d\n", ret);9 T# _6 t4 Z3 V; F8 c
#endif' _* E/ o) k1 s( p M5 u3 n
ret = platform_device_register(&da850_evm_tl_leds_device);
3 y" a5 Q/ E7 y# i if (ret)# N+ ?! B2 A0 h* E# c- m7 a; p! Z W
pr_warning("Could not register som GPIO expander LEDS");' Q0 E0 D: L* Y
else
4 l0 c W( U9 N- J c( o i5 E printk(KERN_INFO "LED register sucessful!\n");9 _5 n' E7 z, o! _. p
8 t1 {/ Y: y$ G8 U8 J2 |- G; P return ret;. j0 ]) d* G( m% k# y- d: Y
}
- r0 V( S& M/ Y x8 @. N& |& r7 H' a0 U, p( O
static void __exit led_platform_exit(void)) _2 Z$ i! G6 @8 P
{
5 Q8 c5 ]6 ? p; L6 ` platform_device_unregister(&da850_evm_tl_leds_device);
& A0 s9 F- d$ M0 R, e- E: ~7 G% W8 x) S" ~: f9 M
printk(KERN_INFO "LED unregister!\n");! S# |4 }# s: [( X3 W) A6 ^
}% X& J7 ]: x v5 ~5 O8 [: b9 t
# \7 W" X( e* _module_init(led_platform_init);
2 G, Q6 d4 ^; x6 Y3 r% E2 [% bmodule_exit(led_platform_exit);0 P" Z2 `% Q0 W/ a% ~/ P
- e- U/ a* n& |9 ]# @, r, kMODULE_DESCRIPTION("Led platform driver");- ]% a( c7 h, I# f% e. r
MODULE_AUTHOR("Tronlong"); W5 w. [4 H& p1 K" p
MODULE_LICENSE("GPL");* N) W. N W: _. [# [$ |- p6 `. a, a
7 J7 H+ C. \, D* D' a |
|