|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% r* F0 c& D0 j; G) o6 Y#include <linux/init.h>6 y; N* v* m& |
#include <linux/module.h>
" F- E* M8 J& @$ J2 z8 q# p4 L' p#include <linux/kernel.h>5 s" S2 d: |. x$ U3 `% `/ d4 Q ]
#include <linux/types.h>5 o8 j$ v& b) ]7 W: @
#include <linux/gpio.h>
0 _1 H$ ]/ R# x+ ~6 n! F#include <linux/leds.h>3 c" d1 ], @( I, k* ~5 _* U
#include <linux/platform_device.h>
- z: `* F( S# v" A: ^/ E9 S$ [
9 e1 {5 x7 a8 f% J6 y0 f#include <asm/mach-types.h>% _- G$ u; E0 ]# N7 R/ X, \
#include <asm/mach/arch.h>. t. D! V) V# A& y! R
#include <mach/da8xx.h># H" W4 f. W5 m7 `- S+ {1 E
#include <mach/mux.h>5 B5 b; B; B$ ?) F1 ]$ q
0 u/ B- m0 y# C6 h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) {5 f: A+ d, i4 S# A
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 r3 v* J4 A5 h( b$ g#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): C' y) j" G6 i" I) G! M4 w# X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 \) v: O) Z4 Q. T: M a
% k& K7 ~6 L5 T0 Z+ V/* assign the tl som board LED-GPIOs*/! ~+ O( E7 h8 L; K
static const short da850_evm_tl_user_led_pins[] = {5 j2 ~, h! i! D- _4 O% r% ]3 h
/* These pins are definition at <mach/mux.h> file */
/ c0 K3 z: a) O) p9 V# e w# B DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ w: o7 \8 }, l -1
- E/ y% T- R) A5 V! Y' h4 _};
$ v5 ?3 d! N9 }! n# |
: s" v6 \+ J9 B( u/ }% hstatic struct gpio_led da850_evm_tl_leds[] = {/ b7 J( _/ P$ j6 g; P3 z8 ]
{! s! p& v1 h4 g# {6 T0 a
.active_low = 0,2 Z" C" k; r+ _; D, m+ D( G2 g/ M
.gpio = DA850_USER_LED0,
/ L6 v0 n/ a5 O .name = "user_led0",5 l/ N5 {; j2 F
.default_trigger = "default-on",
# X! { n+ C( ?- D, a },+ T# C% p) l) I! r) L8 T
{; | K( u( i) S2 J
.active_low = 0,$ E' r& \ t. g% E9 L
.gpio = DA850_USER_LED1,
4 V2 A4 r5 Q L. ` .name = "user_led1",! w# g" b. o& S& c. n# B$ v
.default_trigger = "default-on",
9 x. K4 [( T: N* ?% N },' L( {* _- \5 z7 w/ n8 i H
{
# @/ R) F. I0 W/ Q7 y& h7 U* r .active_low = 0,
' D. N3 @$ V# W0 I5 k. I .gpio = DA850_USER_LED2,0 O1 k: B2 K3 [+ Q8 d$ {' [( t
.name = "user_led2",
! v6 u* C& l& J- H; w0 M8 a2 M$ B .default_trigger = "default-on",
2 f/ z+ R) s9 c },9 Z4 _1 c; C. k
{
7 {/ l2 i# ^& F( Q- E: @% C& T .active_low = 0,
1 F4 k; W5 |0 J B6 i/ W .gpio = DA850_USER_LED3,4 ^7 F8 U5 O, q6 [, l0 i1 {
.name = "user_led3",# `! P$ i! w+ m. k- q$ U5 y
.default_trigger = "default-on",
. H x: I$ {! Z4 G },0 I/ n: s: {8 B" Q" O) h
};
$ z2 s* X* Y, T3 R
; Z# y! d7 m+ q' v# L9 z# f' _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 r4 ~/ {3 Q, W$ b( O
.leds = da850_evm_tl_leds,
2 s# C0 J% g) c. E7 i .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( t/ k2 Z9 l, c" N9 s0 L3 m5 Z6 N& V
};, h) |6 K# l g' S
9 D/ k2 K7 F7 R: p
static void led_dev_release(struct device *dev), C$ ~* W- k% Z
{
3 c' ~! O2 k; k& k7 z. A};
' f# u2 z0 v' E3 {6 v
; N( r- O) k0 C/ i3 ^ C9 Q6 ystatic struct platform_device da850_evm_tl_leds_device = {
+ x6 j+ S, O+ A* ~ .name = "leds-gpio",) n5 f% L+ O1 f9 X# c! }
.id = 1,3 w3 y6 V+ E3 s$ k* H
.dev = {+ d+ t+ i9 V: l
.platform_data = &da850_evm_tl_leds_pdata, V9 d4 }; S* a4 X' N
.release = led_dev_release,4 y1 c0 b" i! J/ ]/ h/ \& @3 M
}
9 c& f& r( g% }3 q& k3 E};. ^; L$ b: Z% g \. P
% v% l" c% S4 \! }5 b7 {$ o
static int __init led_platform_init(void)
I2 p, Q# X5 w. N) A; K0 `{* C5 U% i" [* c- e
int ret;+ c2 O' E$ H1 d. d' l+ o
#if 0
7 Y* t" S/ }3 x ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 U6 M% d+ a5 q. H' V& q- X7 k if (ret)" w8 |/ i. H q1 m# p9 d9 `
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 y; h5 ^0 F' U! f2 V8 e
"%d\n", ret);
0 [9 B; l! Y! j& P2 F7 D#endif
8 @% `/ w9 u+ L$ Q! P/ @* H+ ? ret = platform_device_register(&da850_evm_tl_leds_device); V1 m( s& d4 C# e2 E/ k8 b$ O
if (ret)
+ W5 K* }2 a O/ h pr_warning("Could not register som GPIO expander LEDS");: e5 X8 P l0 u' N7 v4 n7 C
else( x9 ~% d' }) c' a
printk(KERN_INFO "LED register sucessful!\n");2 m# \% A$ _6 [) G {+ Q* o) h
; s, p' q A, {1 w/ U' ]
return ret;. Y1 s) S" u( [: t
}
( y( G$ _ ^+ U% H! A) P% W6 \5 L0 o; C4 `
static void __exit led_platform_exit(void)
) K. j D! X/ X& @. e( p3 d0 k{
2 F! I/ s! I G0 W7 q* L2 i platform_device_unregister(&da850_evm_tl_leds_device);% R4 v! \4 N. P8 w/ a
/ C; W* c2 k' k3 s8 o( W3 j printk(KERN_INFO "LED unregister!\n");& X' f, I C9 u9 z5 P
}
" Y: y. ~ ]* a, U+ L
`2 E1 t9 m5 Smodule_init(led_platform_init);
& y7 X) r. }" j. D5 X& ?module_exit(led_platform_exit);, u% l2 k' I7 c+ y4 z* {: I
& `8 c) j0 u$ ~! d/ T9 i5 S F7 }" mMODULE_DESCRIPTION("Led platform driver");
7 o6 m5 r, k( D3 f9 `3 m$ S' FMODULE_AUTHOR("Tronlong");
' c5 |, Q1 p+ \( J( R1 g- }MODULE_LICENSE("GPL");
' [! X( P- k; G) x6 c( e( S5 E1 L6 k3 `( R) l2 }
|
|