|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) Q8 j; x* d7 @: s3 S+ w4 x2 S
#include <linux/init.h># Y6 r. ^0 `; z8 c1 ~0 w
#include <linux/module.h>$ ]- T) @) s) f$ a& u i
#include <linux/kernel.h>
1 K( |' P1 f& {, E#include <linux/types.h>: N1 }$ G# y8 e: O5 C, P
#include <linux/gpio.h>) z1 G) L: d( |# n+ v1 Q/ d6 {
#include <linux/leds.h>
6 U0 j9 X4 q7 M3 E, C9 f/ S#include <linux/platform_device.h>
! }% [) a/ z) g" z0 g, \+ w2 N! n$ R4 b" ^6 v1 @& a2 O/ m: M8 b
#include <asm/mach-types.h>
3 E8 W# N* L# |8 j" R- s#include <asm/mach/arch.h>* i' b5 o8 {7 |
#include <mach/da8xx.h>0 X3 m# s6 |: k2 c' s. W% d5 A9 \* k
#include <mach/mux.h>1 n! C Y: } N5 R3 ?& {
8 N7 e" P6 o: O4 `
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 |" A$ i4 {5 c# t) I1 G/ R
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 I3 u# V( W% t7 Q2 b#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 V- |* F0 s+ i. z: {- E#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 r7 G) A) e4 G0 D% \2 y
; q( g* c% P% a$ e6 {. ~ c+ V/* assign the tl som board LED-GPIOs*/
; {8 ^4 {5 ?: v) T0 J0 dstatic const short da850_evm_tl_user_led_pins[] = {
. A( j! G# |5 y /* These pins are definition at <mach/mux.h> file */5 }* ?! e* w* k( r+ x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! _3 e+ L0 R u, q; A9 C" e& W; P, i
-1: O& _3 W2 U. q4 K' U n. M' c
};) H+ J) c( J& ^, B q
J2 L3 U4 j) S
static struct gpio_led da850_evm_tl_leds[] = {$ ^3 z- V7 m- R- g5 x
{
6 ]& E: c+ H Y+ A+ [ .active_low = 0,8 v& R' @. D0 l$ G1 A% ^. Q
.gpio = DA850_USER_LED0,
; Q4 C! v# X! d+ V" u .name = "user_led0",
" A! c2 d3 J8 e$ e* r" t" o .default_trigger = "default-on",2 P% ?/ W* y, ?! S
},: J/ ~5 T }/ J9 \+ |4 z
{
/ _+ S+ I0 a- D/ i8 d .active_low = 0,# m2 h- D# [3 u2 n4 Y m1 D
.gpio = DA850_USER_LED1,& S/ N7 S- s$ Z y* X
.name = "user_led1",
; _" V0 _+ G: }9 z: W: i .default_trigger = "default-on",2 f; t$ ~& o v: Z
},' f3 y$ L! I5 t) c' d% I" o4 U" c9 N
{ ^' R2 T5 s" _1 H; N2 h
.active_low = 0,
; e$ F4 V; E- X .gpio = DA850_USER_LED2,
( y, K8 Z! L% q/ X3 ?& A- z .name = "user_led2",+ S8 x$ k7 E6 h/ o8 M5 D
.default_trigger = "default-on",
2 p# |0 |. y9 z* @( w: [0 V },
4 s( W; |' M2 T {1 H2 f! A% `0 O+ x) V9 ]! Q) x
.active_low = 0,
1 N! k- @- [- l- I& X2 t .gpio = DA850_USER_LED3,
3 t% t8 O, T* E% ~( E6 w% y/ w" B .name = "user_led3",) y/ _8 j) `& a# V
.default_trigger = "default-on",: V9 u0 W. d. U( ^
},
6 w5 A2 Q' f/ @* C N};
! D( w$ H7 J/ X( V" \2 _ w8 H9 f% g! p$ Y6 T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 B* P& [4 x6 n3 X) A. T# f
.leds = da850_evm_tl_leds,6 Z1 [- T( i3 S% o$ g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 h5 ^) y% x" D; }1 j}; c- ` C5 R. g- @6 ^6 h7 ~# a1 Q9 I
5 ]0 X- B$ |) }, g, ~9 o
static void led_dev_release(struct device *dev)5 b, H2 F: P* D/ e
{0 h7 {8 P' {- z2 n9 ~2 s9 D
};
) _2 u9 @# n5 f/ s% C6 [$ h* K2 \% V9 n/ v% \
static struct platform_device da850_evm_tl_leds_device = {! N- Z2 {& P* k: } S# @
.name = "leds-gpio",
* r4 S/ b3 ?9 ~1 D, Y* ` .id = 1,
" t5 n, g4 _3 @+ o( W5 b .dev = {" V9 \! P% P' b
.platform_data = &da850_evm_tl_leds_pdata,
( b3 [0 F f$ x .release = led_dev_release,0 s) j% g+ r! W. F2 Z7 R( g
}0 j r' }- X- Z* J
};3 H/ Y; w! {% ~% i5 J4 b8 Y! w
& e$ w6 `% t9 }2 z! x# Xstatic int __init led_platform_init(void)
: d! i% U- u/ x7 [& V# a* v/ e. D{
- v) ]1 a& V# V V1 `5 C2 Z int ret;- T |2 W3 t) z# |- Z) n
#if 0; F: B. O. Z6 @' s+ y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 |" y1 \, ?" @2 }- m
if (ret)( s, n- N% M3 c/ @6 T4 E# w
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 [2 k) y4 X( ~* Q "%d\n", ret);# |( ~: H9 w5 F
#endif" K7 ?. n' n! _- k
ret = platform_device_register(&da850_evm_tl_leds_device);
/ H& U2 O- u/ V4 X if (ret)3 M' O( [. S. g$ C# v) A
pr_warning("Could not register som GPIO expander LEDS");
; o* x$ D1 w8 H8 ~- `; u else
4 V8 b, @6 L# r5 u% @; ]. [ printk(KERN_INFO "LED register sucessful!\n");4 p/ d O: X Q0 T' |6 q! i; W% a, f
5 ]: O" ]- N a, u8 h return ret;
: h3 A( C b0 A( V4 a}# L! ]) t; J: X
! ]( `# U% o1 ~/ Fstatic void __exit led_platform_exit(void)
" U8 x. [: u& Q% e* v{* O, z8 q; o( x& J5 ^) m# W
platform_device_unregister(&da850_evm_tl_leds_device);& Y' ^0 S2 \6 `9 E p5 R8 u- N
/ ~- x2 t' }+ \* T" w0 u printk(KERN_INFO "LED unregister!\n");( F0 p: O5 l8 ^9 E0 H+ G6 s6 |
}
! ^+ f8 M' g6 \ J; a
" V! D3 d S. n# Fmodule_init(led_platform_init);
# V. L g+ r* R$ S3 m4 pmodule_exit(led_platform_exit);
' m% h% f: `1 o! \' [1 X8 s& n
2 r8 h9 `1 W6 u$ EMODULE_DESCRIPTION("Led platform driver");8 E9 O2 \ ~* b; S" _
MODULE_AUTHOR("Tronlong");: s0 @: z/ R. Y" a
MODULE_LICENSE("GPL");
6 H3 X/ u" b9 m
7 ~7 h$ W* ~/ ~5 `- i5 h |
|