|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ I, [! i# m- {5 r: _#include <linux/init.h>' a' M4 Y. }, J4 L
#include <linux/module.h>2 h7 G8 g% x4 I4 e
#include <linux/kernel.h>2 D1 e) v' C$ x( u. h
#include <linux/types.h>
1 y) k/ \, j/ c1 ^* g3 W#include <linux/gpio.h>) R, q( O. D" i W; l3 H: p* P
#include <linux/leds.h>! ?- I. M- r. o
#include <linux/platform_device.h>
6 i% X) j5 K& h) C! }' K9 m
4 r5 V4 E, y; B#include <asm/mach-types.h># R+ }% t1 G p0 I; J* p. @
#include <asm/mach/arch.h>
/ w% C6 w5 C, n9 f9 }1 w3 V) Q, E# @#include <mach/da8xx.h>! k( B5 j3 g# S& E' c+ a
#include <mach/mux.h>
2 M. T& [5 Y) `$ _
+ p. e" m+ C, r8 C* @7 T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) i, |" J. q2 K& Y1 G+ o0 _
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 g# n1 `* H3 }' @# c$ ]
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
E3 m; e" O$ g1 v z5 [4 P$ v#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), y# d7 l( x9 d2 _% `" z6 ?
! R6 \6 A' y) X! ~/* assign the tl som board LED-GPIOs*/
2 A: H$ {) p3 z5 Z; H8 j- Jstatic const short da850_evm_tl_user_led_pins[] = {
8 d2 [/ x( z; D, _" B# ^8 _+ n9 B /* These pins are definition at <mach/mux.h> file */. J2 o$ g* a% m3 B3 _1 E* ? F
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% z ~8 ~$ n& z4 F) l. a
-1
. p9 N: ]' y' L1 Y }};7 n% `& q" P, c& |
3 p5 a6 A: I9 O& p7 ]9 Q
static struct gpio_led da850_evm_tl_leds[] = {
* K% ^3 T* J# Q& N0 O5 T7 i {
y$ z: y a& ^ .active_low = 0,) `9 r5 N' Q, g9 j9 K% H6 }
.gpio = DA850_USER_LED0,; A& ?7 i# S* F& u$ O" d( g& A
.name = "user_led0",
: p( y$ n4 \- U .default_trigger = "default-on",9 J7 Q$ h4 |: b
}, S, h- W( Z1 k& L/ Y
{
( Z) e+ U, X+ Z7 r4 [- E0 d( ~0 P% O .active_low = 0,/ G( `# p: l4 y* l1 ? b0 X" v
.gpio = DA850_USER_LED1,. }. t/ w& A6 R" q
.name = "user_led1",
- k- k% f% h; v/ Z: l, ?0 v# W! J .default_trigger = "default-on",5 F. Z( I7 h) J! v+ M% l) Q
},$ m/ w8 i! m; I+ P- r) }' W# ] f' s& Q8 ~
{9 u) }$ ]' f3 a( v1 q. n8 X( h
.active_low = 0,
7 I; q: L# M6 K) ?! X, ~* l .gpio = DA850_USER_LED2,
0 j( E" B2 j5 J b3 B0 d7 R .name = "user_led2",
# y: v& B5 J1 i- Q8 {' ~3 F" c .default_trigger = "default-on",
: u B: I5 v+ w },
9 L9 h1 d3 L9 g/ a7 @7 _ {
( S( k5 R9 i0 v; O/ k .active_low = 0,6 O5 _3 X1 k* Y5 N5 F( m; K
.gpio = DA850_USER_LED3,
, }' r* h* F9 z r6 l# o) W .name = "user_led3",
0 g: J( D& j# _+ O4 A/ f .default_trigger = "default-on", O+ H8 U1 m y; e5 C" {' ^7 q. r# D
},
% ]( v: p0 h9 A/ ^};1 U! V! Z" C# z# q' \ H/ o
" x& ~. C s' h8 @9 U5 ?" s* L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 o2 R: | e" E* R4 ~1 @1 ~/ Z
.leds = da850_evm_tl_leds,
" x5 N4 j: T) s( d) \6 ? .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 Z# e% c# v+ m$ b
};
5 W2 q x2 U5 [9 t( g6 D3 ]1 E% l7 R7 L
static void led_dev_release(struct device *dev)0 ^1 I& Q& ]+ `+ J
{
2 T' X+ e/ ~, f) O' `* b};4 R! }; t: q: `+ Q/ m7 u, O. L
. Y7 {. x0 L* hstatic struct platform_device da850_evm_tl_leds_device = {: g& m3 @. k1 ]9 ~# ~
.name = "leds-gpio",
+ @6 W5 i3 l5 ~! s# G' V .id = 1,
) \. H# x% E4 H2 R' O' {0 { .dev = {8 n. d [7 d. U$ s5 Z2 j* r. k
.platform_data = &da850_evm_tl_leds_pdata,
5 C% n) N- N2 g) g* L .release = led_dev_release,
$ p/ h8 j7 L7 l7 h: T3 ? }
) d7 s$ t) Q+ a" Q};% b. D2 C* s. R7 |7 p R9 e! S
6 s. W" G1 P0 ~ v4 J( g% j
static int __init led_platform_init(void)
8 w9 I. _+ O5 c6 R! h{
0 v* F" V& K4 w0 j int ret;
$ b4 O8 n" u2 A0 Z; f2 a# N#if 0
% R6 L7 v' B* \5 F2 C ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) ?, S2 A( s5 Z' T; F if (ret)
5 [3 p4 G5 @/ g+ [/ _2 \5 X( [ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 X1 H# N; D+ m
"%d\n", ret);
8 {! o" P) `# Q! R/ }#endif( K' \. V& M$ i- s& h- T
ret = platform_device_register(&da850_evm_tl_leds_device);4 i+ F4 e# [- V+ \7 y- V% I$ I1 _7 a
if (ret)
3 D4 g3 N; D# x2 [ pr_warning("Could not register som GPIO expander LEDS");
; k' _$ T% G& B: Q8 B9 e else g0 D5 k, m6 R; a# b
printk(KERN_INFO "LED register sucessful!\n");
, E: c- l2 N1 P/ ^% ` N2 K, Q; F: ]' M
return ret;/ q! P* q/ |; K* W% e: x+ c& M
}# ]; h% \3 k3 H; E; F
$ m& W" w- j* Xstatic void __exit led_platform_exit(void)
+ C |# l8 M Z( G! {" R{
! k8 K1 _( u% ~ platform_device_unregister(&da850_evm_tl_leds_device);
2 g' f/ v" @. Z) H; [& C/ T& c |- Z* w/ C+ ~
printk(KERN_INFO "LED unregister!\n");! c$ e4 e/ \; V
}
/ w; M: l( e% K5 N" r8 L! g/ g6 Y- P
module_init(led_platform_init);
+ t: \2 r& T6 u% \9 Q. G. I9 pmodule_exit(led_platform_exit);8 \, K) R+ E* W7 U
" M/ t& ?. P: q. }; S5 H
MODULE_DESCRIPTION("Led platform driver");) c: }* N5 B4 m- r/ h
MODULE_AUTHOR("Tronlong");
& b' m' `% k/ I% YMODULE_LICENSE("GPL");
3 B# d! J* B3 [% q. a5 m' B" T8 C; [- a
|
|