|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) P9 m; y0 X1 t. k( w7 N
#include <linux/init.h>
5 J5 o# a( c' C j#include <linux/module.h>& B/ o; L* h5 j7 F5 @0 d2 S
#include <linux/kernel.h>
8 t5 D: F& {3 \% Y& x, o#include <linux/types.h>
! `+ P$ m0 E3 D% k. D: w. n#include <linux/gpio.h>/ ?$ m+ u8 O; l; @" F1 c0 E
#include <linux/leds.h>1 d d3 N/ U; n( J$ X# ~
#include <linux/platform_device.h>
* `" ~7 l) R3 G6 W4 }% _5 Y
) C9 w7 I. s7 H3 d% f$ y#include <asm/mach-types.h>. V: y; l% T0 D6 g A& ^+ q
#include <asm/mach/arch.h>
7 N* p! Q b$ Y5 i" s7 l+ N. I#include <mach/da8xx.h>
r; T% I! s" Y. j/ `#include <mach/mux.h>
/ v8 g& ^6 U3 t6 s
6 Z1 Y, \1 |6 E% v: h#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ C/ D6 ^. u$ S
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* [/ \7 v/ S& t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 l' e. L+ N4 I1 H; a* X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: _$ T! D* K$ ?$ M+ x; O* U. R4 L
# t5 U- R. o2 y3 m/* assign the tl som board LED-GPIOs*/# x4 X/ @+ P) R
static const short da850_evm_tl_user_led_pins[] = {( @9 K+ `& B/ C' W) |& {' G& U
/* These pins are definition at <mach/mux.h> file */: n0 v# F/ `/ ~5 u2 x: a* T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ e9 v7 p) K3 q; y -1
& m L# l" E8 o};
7 Y" L, w! w. K/ y( V+ g4 o2 z: U8 s
- C2 B3 |. q0 G- V, G' @1 B ?static struct gpio_led da850_evm_tl_leds[] = {
5 b3 L! |5 w' ] {' q0 n" P) Q8 `) S3 Y& L
.active_low = 0,
1 O/ p ?: w7 _* M2 ^! W/ E1 b .gpio = DA850_USER_LED0,
1 I5 X( S9 d- S& x1 g+ l _& g5 ? .name = "user_led0",
; J4 K7 e! P' L' n/ f, ^( [ .default_trigger = "default-on",; \. W6 R y: Z" w7 {: R
},
9 Z; @# G) Z; P9 r: X+ ?( e* B {
2 E; F1 z% k9 A- h9 I .active_low = 0,
9 X4 J- X! H/ g6 O, N9 I! [ .gpio = DA850_USER_LED1,& ~9 \6 ^8 L$ F5 O
.name = "user_led1",$ N v) C; |$ H. m
.default_trigger = "default-on",$ f! O" H0 S2 G; x: |4 M
},
# H- f! n! H+ @' y2 o {; z7 y- ~% N$ d0 h
.active_low = 0,
" s5 u* E" w: }8 B .gpio = DA850_USER_LED2,
* j! Q5 c+ _4 q9 u( |6 T .name = "user_led2",
7 @ [# F1 f0 s* d6 p .default_trigger = "default-on",
! B1 v; \+ j# H. S8 V0 H! l8 G( a },* F; k1 ~/ L( o! r" K1 K
{
' ?# R7 B2 N- z7 W% H8 p1 X .active_low = 0,5 _7 Q4 L' }9 Y j7 X& @/ `
.gpio = DA850_USER_LED3,
7 E& _9 f& @1 V8 Y/ I3 q .name = "user_led3",, Z5 }) P* |% A
.default_trigger = "default-on",
3 o" w3 W' J/ B+ e0 Z/ \ },( G, G7 D, n) l
};
" J' h' K8 y6 W; m- O# i% w* {' X& ~/ r# k' I
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( W" [1 n3 s! @0 o: l0 \6 T9 l
.leds = da850_evm_tl_leds,. i$ s: C: f- o/ w# k3 ^8 r0 |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 s( k2 z- A% _ P7 s
};& z2 D ]: z# [/ A3 y7 o$ t, {
, J9 y, A* P/ |1 M& G$ z" X% jstatic void led_dev_release(struct device *dev)4 Z+ L9 N0 @( i( e5 L% R8 J
{% ~8 `9 E+ e# t- Y. D# S
};
# `; J& J l/ H- B3 L: q0 s3 P5 z$ M0 X1 k! ?
static struct platform_device da850_evm_tl_leds_device = {
4 R8 }% y8 \- t% Z .name = "leds-gpio",
& r1 t* m8 c! {# E! ?! n .id = 1,6 R( M3 e L# ~7 X" s1 `) @
.dev = {
6 o& ]# R. S. `7 Y7 v9 | .platform_data = &da850_evm_tl_leds_pdata,
# i# Z8 Y3 ^3 W/ v8 e ^ .release = led_dev_release,
' X. x* Y4 J3 b5 |7 o$ G }
4 z" u& d3 Y1 ?& L# J};
: v- I; m3 C z& B/ l3 W; i: Z' o
static int __init led_platform_init(void)
6 b8 Y' S" h) C. C y: L{
! F" z% M2 e. v% `- J. R int ret;
- J" y+ F+ l3 `8 T) N/ e9 Z#if 0
1 _1 \3 R3 v/ }' A2 W; K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. v3 k0 D+ R9 C8 [, w if (ret)# `3 m$ |' J' u; L! F5 N! k X8 v
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": S# R9 b' Q! z T, h+ c1 ^) e
"%d\n", ret);
* t3 F6 z5 z. u6 B4 f2 g#endif
4 x+ K2 s3 \4 Z: \# P ret = platform_device_register(&da850_evm_tl_leds_device);
^, t( q$ w- [) y- j) L2 d if (ret)
; S \. d+ }; A, e2 V9 Y+ z# a pr_warning("Could not register som GPIO expander LEDS");& j) G7 C2 m' T5 f1 i+ ~; W; U( \
else
S7 W4 l% m! B% F$ G5 ]- S' K printk(KERN_INFO "LED register sucessful!\n");& y0 r2 i% }5 c" F) [
% ]1 D6 `( x* @# E& @
return ret;
2 B; g* Q0 p/ j6 t7 j) M3 l}4 C6 J, x, a2 @
. l5 _6 I+ v4 n; V) ~" Nstatic void __exit led_platform_exit(void)
8 j G6 e, |4 t) f4 e! c* u{
' V, g- u" |0 ~" X, j; D platform_device_unregister(&da850_evm_tl_leds_device);
& A# H k& E+ R" y: L) N* e% q& }
) Q5 A, s+ T ~+ i printk(KERN_INFO "LED unregister!\n");( I0 w$ `: D4 B
}
9 J) i( g9 e5 n7 r* o1 o: t; e0 P8 \0 n" \: x3 W& |- ~
module_init(led_platform_init);/ H n2 F2 g. W' J
module_exit(led_platform_exit);" d" H& Y' G2 d2 r
, S3 o4 r; ^* V0 H: }. bMODULE_DESCRIPTION("Led platform driver");
3 p( Q1 J6 f8 uMODULE_AUTHOR("Tronlong");* F7 T1 j( E% f8 H9 p; N& D- D
MODULE_LICENSE("GPL");
" ~$ ]+ x6 `+ j3 j
6 ~" u: b7 U6 N% E& R, C |
|