|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 q. V+ l7 [3 o8 e- B9 Q0 q5 f
#include <linux/init.h>; x b4 d% |: f% B
#include <linux/module.h>
! v3 |5 Y$ J1 r9 J9 g#include <linux/kernel.h>6 B# L+ Y" g s7 m7 S d
#include <linux/types.h>3 ?- Q k+ [ @4 F {- h
#include <linux/gpio.h>
. j! t- C+ I6 x \( G#include <linux/leds.h>1 o. v* p' Q6 A: }2 o: X6 T2 ^
#include <linux/platform_device.h>
( P2 _4 q7 D9 R d6 }& g* t) K3 X7 M+ K! @
#include <asm/mach-types.h>
8 b' g' k) n% {) a. L+ _) A#include <asm/mach/arch.h>- U5 z/ ^: q& e- o2 {8 l0 N: G
#include <mach/da8xx.h>! z: z5 j3 l6 }: h: s2 g* e' X+ d
#include <mach/mux.h>2 k+ X, }) I1 W' q0 U9 m
B. D( d0 E5 R
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, m4 [# [* M" F9 _. ]8 `/ U# i4 o8 X#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. S3 Z/ [; T" M/ A6 o* M: Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" M+ c( y: l7 t: l' D# b3 A& v#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# d: n3 i" b u7 Q- f
( ^2 u2 C9 s. _7 A0 o1 z$ `& I/* assign the tl som board LED-GPIOs*/
1 p9 E7 [! C; F$ X( Istatic const short da850_evm_tl_user_led_pins[] = {5 n5 {* j% V# f* |4 |0 g4 e4 d/ M
/* These pins are definition at <mach/mux.h> file */
% }2 G# m1 m+ Y. j. { DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* k( D) O* F1 G, \3 |( J% h; q -1
9 J5 u9 A$ X4 S+ i6 `1 i7 ^};( Z. v, w: l/ v5 o; c4 W
, y6 }7 T7 V i2 n# ^' l. X* Z) b
static struct gpio_led da850_evm_tl_leds[] = {
. ~4 h: c, z$ W [ I! N {4 W6 ~5 r4 J/ N' k3 a
.active_low = 0,( {5 I2 b( e* w$ u
.gpio = DA850_USER_LED0,6 O5 ]. |; k9 L
.name = "user_led0",4 n Q" v% W2 K' f# L6 g1 c
.default_trigger = "default-on",
# K7 X$ u9 t# g },
' Q0 }: \6 P! k9 a1 k {
2 Z( E; A3 K k, j .active_low = 0,
" W/ d5 Z2 I5 ?' x* I/ u6 M .gpio = DA850_USER_LED1,
* y2 _6 B/ x& O" W .name = "user_led1",1 \) L* a. V- o6 v ^ }
.default_trigger = "default-on",
, ?7 H# p1 `# I+ X8 [' x },
7 q! r n p' B4 g% V; ~, a: K7 @! t {. T! E1 W$ [/ E( ^6 K
.active_low = 0,
% F1 A" Z% Y6 z- x! m: `: N! | .gpio = DA850_USER_LED2,, i8 [0 G/ p$ u5 J
.name = "user_led2",
/ N3 j$ I( b: o) P R- R# s6 N7 @ .default_trigger = "default-on",6 y- y; Q. Y I9 ~( {
},! z/ [/ k& Z# H! q+ G4 l
{
1 Y1 b0 H5 [. H( j9 T) f% z .active_low = 0,
3 h. ~- J5 l9 J; T .gpio = DA850_USER_LED3,
. G" p' W) ]* H6 n) k3 {' E5 Q .name = "user_led3",: \; q; u/ `" ~8 Y& k; _9 `, P; d
.default_trigger = "default-on", G, v- E( a: Z7 J. u6 e% n
},# F+ O8 I+ D' U* E
};" N; r8 f. Z8 \7 d
: ]4 E2 _9 h& X& y, Bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 Z, p% x( t* z8 e
.leds = da850_evm_tl_leds,' R( {9 ?% M( L5 l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 y" d( n- Q7 d! k
};
; v, i: l, R# b% t- E9 K [$ m ^9 W5 V; v& B& V
static void led_dev_release(struct device *dev)
% j5 D& Q% E) m. `. m( e{
$ q0 p5 S3 f3 i! K: ?+ r};: X5 h( S) x$ f4 ]! O
l3 b4 s0 F+ z$ Ystatic struct platform_device da850_evm_tl_leds_device = {: J/ d3 q/ b% @7 W& H
.name = "leds-gpio",
# M: W4 I. L! T .id = 1,
/ L$ M9 [* h$ ]/ b9 w S .dev = {& p4 j% [" r4 V' {+ Z& B5 r2 {" l' c
.platform_data = &da850_evm_tl_leds_pdata,
/ ?. Y, L& B! d% H7 C .release = led_dev_release,8 N: @3 F( B( H |! f6 u, f" C
}
6 U1 G0 p! e+ A' K2 f};' k! I. ^( q' p5 a2 q% ~' m$ E
+ o8 N) j" {; n
static int __init led_platform_init(void)
4 [- @; J/ @0 s( c0 t, R B{& Y7 ]* C$ N& X$ C
int ret;5 H P A9 r* C
#if 0
9 F0 x- u/ j# n( U" V ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 [6 O0 q4 z0 I. Q3 }! `' |/ L if (ret)
8 S1 R) {- c2 h% e pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- Z, M7 Y M3 A2 U% @$ a- j "%d\n", ret);$ ^4 J! ]+ t7 } r8 Q8 t7 `
#endif# R5 D8 s/ R# J9 \5 ~
ret = platform_device_register(&da850_evm_tl_leds_device);
2 G# G- O' ^; i5 e& c9 { if (ret)
; R5 S* v; l. S* m7 P pr_warning("Could not register som GPIO expander LEDS");5 T5 I7 x- Z; g( e* a" M0 P" V
else6 \, v% Z* B0 b6 @8 m. W
printk(KERN_INFO "LED register sucessful!\n");
4 U. E' w7 d h+ F
# k% w8 x B! H return ret;3 o: W7 R: X! \6 X2 j
}* G7 x/ v- l1 G
" R, r% m$ t. X
static void __exit led_platform_exit(void)
2 z8 L: F& Z; w$ X{* D7 Y: Z# @* Y9 u3 u7 x
platform_device_unregister(&da850_evm_tl_leds_device);1 G6 S4 {. D2 A* n2 `2 n+ }7 F0 S
, {. i# d1 a# \
printk(KERN_INFO "LED unregister!\n");
/ T) l! h' j) {) X}
# O/ w4 B! G- Y) }, R3 r$ X/ R; q3 ]! s, P/ w( O) T
module_init(led_platform_init);' r ?. O/ w9 A/ J" ~- k+ q5 l
module_exit(led_platform_exit);4 H2 i/ ^& P" \& G% }+ f F
) k& ]4 T" E- b% p0 ? N' Y* gMODULE_DESCRIPTION("Led platform driver");
1 l' I1 V& q8 lMODULE_AUTHOR("Tronlong");
E, M Q: }# |& S5 F" j; c) S2 UMODULE_LICENSE("GPL");; ?) A: r2 L' b8 |) z* {
9 }4 Z8 M K+ u
|
|