|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' V/ B. F8 O0 v, p" ], T a; ?
#include <linux/init.h>
& A- o1 b/ e6 }0 n, m#include <linux/module.h>
; e1 Y" X" C0 Y# l" S#include <linux/kernel.h>
; Z, ^ e D1 s5 X+ w# ]; S#include <linux/types.h>
6 T9 S8 l: N' [9 ^#include <linux/gpio.h>3 w2 e5 |6 D" _3 `3 t& h4 a
#include <linux/leds.h>
7 z$ W" @; }! _2 f3 Z; g+ p$ X#include <linux/platform_device.h>3 s' d* _5 v' }
% y1 f) _( C+ f! N#include <asm/mach-types.h>
) \9 [ G6 |: |: E; P- V) D7 |#include <asm/mach/arch.h>) {4 [' A/ I! c K+ Q/ |2 z
#include <mach/da8xx.h>
! v- x3 I* ^& p) P#include <mach/mux.h>
% |5 K, ^6 J( w% M+ P8 W* o
1 }( \2 b, N8 f, f& X) M#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' [* Y4 b( E$ ?- j6 `& \0 X. f
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) m) f1 n3 s( ?; F# i) T, q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( c: w$ X# O. P8 F5 m/ _- n#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; X9 `+ Q: H2 \& G( i* h
( s: p* W; y0 l0 |( k L3 o# v/* assign the tl som board LED-GPIOs*/
7 i& R1 W/ ^3 R& l t0 M3 p5 R5 Gstatic const short da850_evm_tl_user_led_pins[] = {! p$ G; I5 f+ W# f1 K
/* These pins are definition at <mach/mux.h> file */
7 \% q2 k7 f5 X DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 ^$ w! A6 `" p8 ]) ^1 Y& g( k
-1
! b1 S# Z( R' \3 D6 _};
- g( E/ }' Z) P& z7 o' u; I& H! F1 y
' e- \8 w: @8 x# m3 P6 k! o) @static struct gpio_led da850_evm_tl_leds[] = {# e. Z f/ H9 D) r! ]
{5 z, c+ A9 |3 t6 _) {4 L
.active_low = 0,) t% w# ~" d* i% |0 f" n* M4 P, e2 Y
.gpio = DA850_USER_LED0,) O- i8 m7 [2 e: r
.name = "user_led0",
: J& z& }; L. }! m1 ]- i8 N5 r .default_trigger = "default-on",5 n4 _9 h9 y4 a5 a% H0 H$ W
},
/ t' ]/ M; r% d& O0 \ {9 B3 i$ ^) w4 L! p
.active_low = 0,: N4 m$ R) |* I7 T$ n
.gpio = DA850_USER_LED1,
2 Y' j8 F3 ?' v& O .name = "user_led1",/ |- K; I" V) W. m4 [7 Z: Y
.default_trigger = "default-on",$ s1 s0 i1 ~" K5 I
},
j% E* K( \5 B' | {
4 y# ]( K8 X& l' B) s4 I5 F .active_low = 0,/ R1 m7 l% G7 T( v0 o$ o5 R
.gpio = DA850_USER_LED2,* H+ G9 i8 F( _8 m
.name = "user_led2",
1 L( \8 @# ^$ b3 Z1 Q .default_trigger = "default-on",' P" c& ^% u* V" h) r- X+ s
},
: R) d% J7 a/ r u' i {3 j3 d2 {/ T& \
.active_low = 0,
! @7 _+ U/ r7 L* J- J1 u .gpio = DA850_USER_LED3,
0 o" D H% H; q* y1 W+ \ .name = "user_led3",& }2 a2 c2 t( V2 X7 f* ^
.default_trigger = "default-on",
U* i* h2 N7 i },
9 b( H& ?& k/ \7 x) f};4 a8 D8 n- o1 {) s3 I+ P1 ?
8 }! g9 |8 A3 d6 Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) d4 }$ X `. L: d5 E
.leds = da850_evm_tl_leds,
$ Q) z* o! F3 r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 [4 _. r6 I/ u# r, v# \};
( W' r; {7 t7 d4 k+ r% f1 e' `, w$ a1 x- Y1 t& k
static void led_dev_release(struct device *dev)
?" D" u. x6 k3 W5 K{- {# |( M) m/ }6 W
};/ K, ?0 y2 j5 N' F
9 G& @8 W2 a0 d4 H* \2 F. A
static struct platform_device da850_evm_tl_leds_device = {6 d- h$ Y3 N, O3 \4 t3 N4 _
.name = "leds-gpio",
/ ~; \% [# |$ V+ i8 w3 U; g6 g .id = 1,
$ w3 [ D) Z/ K9 q% ] .dev = {
/ r8 N: k' y `5 c6 n .platform_data = &da850_evm_tl_leds_pdata,6 J! _ C$ l$ D3 v
.release = led_dev_release,) K6 s% O5 u" i6 Y
}
* T0 ^4 ]& n+ L9 S+ L6 J" y! h};2 R; {6 X; b% G) W
G0 C+ g% ^+ Y v |1 Z- astatic int __init led_platform_init(void)
% f# b. t: P( \* w* P{1 Y& [; P: T% C# M$ B$ C8 `
int ret;
! L; q, H% |+ H& h#if 0( X* ?7 m" M+ R5 o/ \5 Y- K+ V
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 L$ v7 `8 J$ l
if (ret)8 {( R% Z3 A+ W/ t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 s8 X2 L+ @1 F! A5 {. `
"%d\n", ret);1 B8 P" Q) J0 s& E
#endif2 E z: ?# `5 }5 \& t7 X7 j: i; b
ret = platform_device_register(&da850_evm_tl_leds_device);7 s+ U: {& o0 `* v; x
if (ret)# [+ j) r' S E U
pr_warning("Could not register som GPIO expander LEDS");
" M9 W- T) V( |6 E5 r- }0 |: d else1 l& ^4 L; o( x' I( L
printk(KERN_INFO "LED register sucessful!\n");
- E9 G9 h3 a! \: G' w
2 p' u& q/ D5 L" a( ` return ret;
4 L+ A' F) C1 X; i0 [! e}7 `/ ]* {' _: X, A' D7 z) o9 |
3 ~: Y% G2 r5 Astatic void __exit led_platform_exit(void)
$ K* b6 V$ s& N7 S+ C" T5 o# U{( W! |* c; m- a# A) g3 M3 [
platform_device_unregister(&da850_evm_tl_leds_device);
4 @) S+ a" K6 g H; b; N- f
4 `1 c$ }7 ~4 d6 R# s printk(KERN_INFO "LED unregister!\n");
7 C' q; Y. \( l$ \# Y}
1 W( r! A% T; g. w; z& ?1 M0 H8 L0 K% ~* C, w
module_init(led_platform_init);
( u/ B& \ L- F [7 v+ _module_exit(led_platform_exit);
6 s2 f# `- J* r
8 M b2 j7 S- _/ Z% \% GMODULE_DESCRIPTION("Led platform driver");/ m3 L' S* g; F
MODULE_AUTHOR("Tronlong");9 Z+ [7 v4 j3 ?! W$ L: U
MODULE_LICENSE("GPL");4 o3 i7 i& n1 {) P
& D3 V3 ~% ^: V4 }0 M5 d |
|