|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 \8 M3 @- H. D- ^0 T* K- ^0 s" N% X
#include <linux/init.h>* @# T' B7 j- }- a7 P
#include <linux/module.h>, U# ]# P4 [" s- y
#include <linux/kernel.h>6 M8 z z8 x! y8 Q+ g
#include <linux/types.h>' W2 }" _6 g( v9 @) D
#include <linux/gpio.h>
/ t: x1 c" ?/ ~+ ~' ]#include <linux/leds.h>
$ S; r; s; H5 B; e! }; {4 q#include <linux/platform_device.h>( A, n0 o' X$ m
% w; \6 s& Y' ]3 I1 K* l#include <asm/mach-types.h>
1 E/ g3 ? `5 V- r- F m2 V#include <asm/mach/arch.h>" M% U3 U8 {, [) o6 h1 i r6 u3 o
#include <mach/da8xx.h>
0 ]: I V1 b' ~3 Q) K#include <mach/mux.h>
9 P' [; ]3 `' F2 D8 J4 e2 H0 q7 W! @8 M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 s F. P! B$ G- Z6 n
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 V- }/ ~1 C0 D e* `
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); F6 O% j8 \* N' _. X! n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" a1 o, g, }! |4 h a5 E: O) `7 ?, A3 g5 g) U& L
/* assign the tl som board LED-GPIOs*/0 {3 @9 v0 r# r0 G( y5 I6 N2 k
static const short da850_evm_tl_user_led_pins[] = {
& C; o; S8 |* K" H3 W% J /* These pins are definition at <mach/mux.h> file */
0 q$ ?3 y5 m. n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& v) H3 n1 c! e -1& n8 y F1 l. ~
};2 k( X/ _( H0 V' n/ ?
/ \1 B9 G j; U
static struct gpio_led da850_evm_tl_leds[] = {
4 A, ?9 v+ h0 v8 E {6 C$ Q( V" ^# O0 B$ n) Z' f Q
.active_low = 0,- F+ G6 P+ ]! z& |; d8 M
.gpio = DA850_USER_LED0,, b5 j; x2 h L! D5 C- l
.name = "user_led0", C+ H9 H/ ], G7 C y$ ?, m
.default_trigger = "default-on",
F# l$ ]$ [. x7 A9 c T },- K0 O7 h0 p* c3 l, D5 z' M
{/ D, M4 d. j( W5 ^
.active_low = 0," ? B; N& T' `6 F$ c& r
.gpio = DA850_USER_LED1,9 x+ Z: y8 h0 H8 F
.name = "user_led1",, A x5 o) H# p" n# _
.default_trigger = "default-on",+ [1 p+ S, V7 R2 K4 w# W
},, z# v& u0 h& Q! Y; Z2 J
{
) J9 n8 d J0 S ~) B: F .active_low = 0,) |& z6 A( }& a: `
.gpio = DA850_USER_LED2,4 e- B W1 F0 d, {* p c0 A8 R9 A
.name = "user_led2",8 N! o2 B9 W# _ {3 i7 p0 ?3 ?# T
.default_trigger = "default-on",) k' Z4 v# o" |: V l8 x# j9 z
},$ E F0 w3 ~4 z% j4 n. p) }5 J
{- X' H# Y6 V5 t
.active_low = 0,
5 n# @, i) V+ h# z v- g' \ .gpio = DA850_USER_LED3,
! W! @9 z; p! ~) ~8 R6 D .name = "user_led3",7 C* {+ M! `5 g0 w$ o/ e
.default_trigger = "default-on",0 n6 `2 R. Y* c
},/ H. T$ u! A' o; n' q6 i' U
};
1 u* P& y. \! ]1 D4 V# C
8 C/ D' x# s8 Y& L" ?: Jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& @- Y, h! T9 _9 [ @3 d .leds = da850_evm_tl_leds,
, r3 U4 j5 e# t9 V2 } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 \, _7 l0 [9 F/ o
};
& X `; `/ N# }1 Q; j8 F
1 @; i s0 ^/ V. X2 X1 ?static void led_dev_release(struct device *dev)
7 y, q# @/ D4 s# k) `{4 U* S' G: F/ ~* }. o3 |$ v, A& H
};: H6 U2 S) I/ n" G
y8 M5 z" d4 O2 y6 x; q0 t" m1 C
static struct platform_device da850_evm_tl_leds_device = {
+ u3 \' N* w. e( O3 g- j+ b .name = "leds-gpio",1 o2 k( _0 ^5 |- r& [' Y# C& y
.id = 1,' j! W/ C7 t: k4 |: s# E
.dev = {
6 q: h* e* W+ T' l& m6 Y .platform_data = &da850_evm_tl_leds_pdata,0 P" b8 a7 f9 X* w# d5 F5 F0 E
.release = led_dev_release,
( V( z% T, W2 z2 { }, b& E/ _- z: L3 `- u9 ~
};
/ M& i# E( m* H' W" J
* ]6 a3 O r! V* M6 g' Pstatic int __init led_platform_init(void)
& m- _$ V# D& O$ }4 d1 ?1 n{
) G5 e3 _% z. ^& o int ret;
& ]% Q" r, f" d. X#if 0
- ^3 p- Z# d0 S" j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 A6 v: \6 A- E e. S. z
if (ret)
7 M7 N0 u9 Y3 |! K' A pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ ^6 |) L: t0 f( ^' _+ U5 F& v
"%d\n", ret);; b8 S; { S: T, K: b
#endif: @8 v% A; g- \' z$ k2 g# d- g/ K a
ret = platform_device_register(&da850_evm_tl_leds_device);
( \6 N+ j5 n8 ^3 c0 o& P if (ret)1 B/ {; i8 [- h
pr_warning("Could not register som GPIO expander LEDS");
4 O5 b; F# I; y2 \4 m else
5 r3 g4 ?6 M3 u6 l printk(KERN_INFO "LED register sucessful!\n");5 ~+ V& K3 H0 Z8 I# U$ R+ d/ y
5 ?5 f8 [: K y: t4 r/ T, I- {9 o' f return ret;
3 Q0 K/ K1 Z' W( W! d}; n ^2 }) j5 ]# O; s4 F" i- z y
2 _4 f0 [" R! [8 kstatic void __exit led_platform_exit(void)9 G, X0 I1 }+ \0 }& l
{: b5 |5 w7 G4 I( _3 k
platform_device_unregister(&da850_evm_tl_leds_device);
Z/ `1 o$ n# {% T) @# F& @/ T1 U- \( j" [7 i! U/ C
printk(KERN_INFO "LED unregister!\n");
9 K d( s) h6 z6 Y- H}
9 T3 I. K# s/ f7 j6 F2 x+ K- u; |
& V0 m" T3 j) b% r# h% rmodule_init(led_platform_init);
3 @/ ~' B3 m2 }: S, umodule_exit(led_platform_exit);
8 D- U9 O( v. W1 f$ w
% b- |* J# q3 N1 @MODULE_DESCRIPTION("Led platform driver");
+ f$ L/ e6 J% n# ~MODULE_AUTHOR("Tronlong");0 u9 a$ n6 @' N$ \2 l
MODULE_LICENSE("GPL");. k# Y: `6 d2 \/ F0 H/ P. K! p4 Q
9 F6 E) L- L# I
|
|