|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' ?" j! H, g+ o0 j$ N$ M
#include <linux/init.h>
& T d# Y8 `8 u#include <linux/module.h>- s" }0 ]/ b$ a+ S* J
#include <linux/kernel.h>
8 J6 }, N* V# q$ Y#include <linux/types.h>7 I4 _0 k. b' m1 }) L0 s: Z, U1 q7 B8 s
#include <linux/gpio.h>
7 M% A, o- \5 L, ^4 a7 A#include <linux/leds.h>
0 {2 j4 f9 `# H& \# ^#include <linux/platform_device.h>
+ X0 ?+ H6 n7 A0 E% c' s Y7 i* v) p% j" `$ |! u( M
#include <asm/mach-types.h>( q: _' |( ?, k% Z& h" J. [
#include <asm/mach/arch.h>0 z% @/ ~+ J" J, L$ p" H# V
#include <mach/da8xx.h>
6 \/ X2 A& C; S& O#include <mach/mux.h>) a! W; f1 J7 L8 q7 w/ p
( M& ?# G1 }+ o" y% y7 |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# p' v7 J1 }5 y, ^; d4 Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ C& K5 B0 I9 E* N9 ]/ n/ P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 R4 U. B3 C! B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 k+ D. j) h5 s: W+ d1 s+ l* Q1 A
/ g( F; W0 b; X) x0 A* c4 t/ E- w/* assign the tl som board LED-GPIOs*/0 f5 o0 C8 k7 t7 M
static const short da850_evm_tl_user_led_pins[] = {7 u6 P, v9 d: G
/* These pins are definition at <mach/mux.h> file */& `% l" L5 j, t' o8 D0 J8 ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& {8 I8 j+ ~& |( z9 P
-1# T& H. J* I& t6 s! n
};+ i6 @3 F1 p ~& \3 {0 l' i
: j/ C5 E1 b: w% \: X5 A
static struct gpio_led da850_evm_tl_leds[] = {
1 w3 B" C3 ?# m3 r$ F {
0 R" o+ e! z4 J: g+ d0 C9 [8 d$ C+ ^ .active_low = 0," G& i0 Y7 m% v9 ]
.gpio = DA850_USER_LED0,
2 W! B6 U8 ], S1 n2 m .name = "user_led0",5 Y2 B, F3 y( P: N3 z- m- ?
.default_trigger = "default-on",
2 j' X/ D0 A3 C+ l% o* T },) a* S: r# y8 b$ g1 i7 P
{8 F( k K5 |; ^1 p( z( }+ i% _
.active_low = 0,
* I9 B) a5 h! U .gpio = DA850_USER_LED1,0 r6 l. g8 o/ j4 I
.name = "user_led1",. z* D& P7 V2 j9 G! X+ R p
.default_trigger = "default-on"," [) \- z6 j) M: I8 u) o
},
* K/ u2 {" v- g& r. m { U6 i! \8 @5 \
.active_low = 0,' d5 s9 I0 M: a2 P* l3 e
.gpio = DA850_USER_LED2,
6 u6 o( p2 w1 q) R l* k# | .name = "user_led2",5 L0 M U# T- O$ G+ _9 I! g
.default_trigger = "default-on",
9 \* g9 H6 Q% p4 S: ] },
2 Y. w( F- ?; d u: h& o' }3 j {" ~! w" h9 b. J+ X
.active_low = 0,
# `$ B! g: ~+ B4 y$ N .gpio = DA850_USER_LED3,; W, ^4 H0 k* h& O; }1 D
.name = "user_led3",
: X% m% ^$ R( j, Z/ ]# _ .default_trigger = "default-on",1 Z: u9 o! C8 s4 w: L: q
},- E; J8 }6 n8 @" s8 ^4 k3 k/ X9 B% f
};% N' f, J2 l* X8 p, R
& x1 @# h g X, s8 D/ ?static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 X) ^. W+ w3 ] .leds = da850_evm_tl_leds,
% H: H* y7 b3 |! Z, ~; a/ u5 o3 M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( x: \: y" M* T
};& U) z. Y, S" \+ E
4 ~3 J9 H7 A$ n3 Y( ^" w6 S$ Y1 i
static void led_dev_release(struct device *dev)5 O: w4 M! x% I! t9 k7 f* J
{$ @1 G x& H$ d [9 R I
};2 x7 P, @3 t/ Z
. T% ?; u' c, r: Y
static struct platform_device da850_evm_tl_leds_device = {8 g; C; I5 ^0 c
.name = "leds-gpio",+ Q# K4 q' K. a+ |3 B7 C! M
.id = 1,3 n L4 k) ^+ H7 R; N
.dev = {- n/ R+ t6 K( V _1 d; T
.platform_data = &da850_evm_tl_leds_pdata,/ G O. X+ ~1 l5 Z
.release = led_dev_release,2 q4 p% L$ J7 s& f" e+ D6 g+ d
}
, N0 g- i9 \" w2 l% W6 H};2 h2 ]$ x1 i4 t& c) G8 y
' }/ F- H8 v/ r. p
static int __init led_platform_init(void)
+ `( o$ C' |3 n& T{6 |, R$ a7 c$ D
int ret;
5 A$ x' Y% G. [6 i: b: X2 @#if 0
: K7 ~9 N* V; b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ X4 S5 U+ w V* V) \! ?: v if (ret)2 ?% `( H2 C2 i$ d" Z; v
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 e7 @6 s9 f b0 y8 V "%d\n", ret);$ S; w# }2 k9 g
#endif% L3 i& V. c# s
ret = platform_device_register(&da850_evm_tl_leds_device);/ N! \# W& W8 N: W& E/ u- x
if (ret)
; c9 C$ _3 v. F% F3 a, M pr_warning("Could not register som GPIO expander LEDS");
" n \1 k7 w( y; h- _( } else2 z9 t% w% R: j5 T. I, Z
printk(KERN_INFO "LED register sucessful!\n");
: J& K6 E9 K% N- X; U0 G- ?& q) P* V: `7 i( R
return ret;) f3 j' Q) P5 r; Y5 i
}
2 l' r3 I7 h; l3 K, h/ k
* j7 g. v w% Z! \( ^8 Sstatic void __exit led_platform_exit(void), K- s; u- f- u; ^# _
{5 S, J3 t$ |9 i. ?/ l9 o# J
platform_device_unregister(&da850_evm_tl_leds_device);
: |% Z4 h- f/ o# P. H1 o" x& n7 Z3 {& H
U2 g6 x9 n& k/ J9 B$ M& g, _3 W printk(KERN_INFO "LED unregister!\n");
, `5 R' _. z3 f n$ ~ F0 |0 z}
1 f; D. z7 x5 N* p1 K! |9 v% [7 f) l; e {: d l/ l0 U; @0 C; v
module_init(led_platform_init);* V, b( c% \3 n2 g9 t& W1 F
module_exit(led_platform_exit);
" C, S4 S$ W! v) A: Q0 i8 f% G; L; ?1 q$ D; H c
MODULE_DESCRIPTION("Led platform driver");
3 F5 u9 q6 g+ nMODULE_AUTHOR("Tronlong");
$ a Y8 P8 W0 S) B/ R1 PMODULE_LICENSE("GPL");
% ^; j: w) H) F- w6 L# v7 V2 H* I& g4 R
|
|