|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) o5 D6 M( ^& R1 r( O$ g- n9 w! J/ G
#include <linux/init.h>4 S& d% D& T" F/ o, Q
#include <linux/module.h>
4 [; k9 J7 W2 i6 Y/ v#include <linux/kernel.h>
7 a9 A4 {1 X; q0 Y- C#include <linux/types.h>
8 o" `$ d% q' }% v; M0 e8 x#include <linux/gpio.h>: H( Q$ v( n5 _5 P9 \! a @
#include <linux/leds.h>
+ F0 l2 t6 ^% u7 |#include <linux/platform_device.h>) C l! i, B) D& ?; A
) }! g$ y& b3 P, E#include <asm/mach-types.h>
: d& F6 [5 q$ X' n$ R#include <asm/mach/arch.h>- s! d% @! Y7 s6 X; i/ A2 T
#include <mach/da8xx.h>" B7 i8 O$ J: Q/ m
#include <mach/mux.h>
! o, @0 k/ _! q% T! U- @" w% I8 M7 D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& K3 g# b) G. i: {# U#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( H! x z4 _- t/ n5 O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! k% g1 T1 N2 X. U m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
B7 P# a" a+ [5 o5 U2 f) ?4 X- j" h9 T) s' G( p! r
/* assign the tl som board LED-GPIOs*/
* C7 ` J" w% qstatic const short da850_evm_tl_user_led_pins[] = {
5 }/ h" L3 X! y, f0 Z: Z* s /* These pins are definition at <mach/mux.h> file */) Z, T3 u( Z6 ?) m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* F8 p1 o `, t3 h3 x1 ~+ n+ G -1
6 }+ q! Y$ x% S' h2 U3 ]};; V6 {1 T o3 E
O( R* ]5 l2 ~5 ?
static struct gpio_led da850_evm_tl_leds[] = {
7 b7 ]1 u- O# z7 W {, B- F) B4 A2 B) \
.active_low = 0,) ~4 `4 P7 ^0 ?' V, i3 Q
.gpio = DA850_USER_LED0,
a ^- U @' X6 \5 C8 Y; \ .name = "user_led0",: `! ]; t" v8 e* z/ a6 T0 `
.default_trigger = "default-on",6 V8 V! r5 N9 w4 U/ h* a
},7 i: x0 z9 J6 J' N3 F3 Q
{
& P# h& ?1 J5 `' y .active_low = 0,
- l/ p* X+ t) C- x# A .gpio = DA850_USER_LED1,. o9 D( J# ~- o9 K% k l( V
.name = "user_led1",
; b8 h9 h7 ~, J* n m, [/ { .default_trigger = "default-on",
D% p9 B/ w: T ]' c },' y8 d1 {" E9 y9 S x1 r
{1 V" w! `/ P9 F
.active_low = 0,
$ ], |" D8 v9 R# y2 ? .gpio = DA850_USER_LED2,
0 n2 w. g4 _5 A( J: o( O& Q8 X .name = "user_led2",# E! J1 F8 C, ~" j! r
.default_trigger = "default-on",0 ?* ]$ e1 V; M( C' Z
},! m! {8 D- h* D$ f/ v+ B9 P
{
/ {, ?# v# Q# U" I .active_low = 0,
8 Y2 u5 E1 N6 Y* j0 o! h .gpio = DA850_USER_LED3,
# n/ f! D: A) k1 o- n, F .name = "user_led3",
, a R. l2 B' R, v .default_trigger = "default-on",
- J% l- @& j7 _! x1 n" Y },
$ J4 k; O( k$ B};1 j x2 x& \1 P! N$ U3 z" g
8 C5 D" c. j/ {% M0 @' B
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# M7 |) Y, o0 ^1 J% D0 D .leds = da850_evm_tl_leds,
+ l" D" k, R7 w, O+ V% A .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' K- p" k& _9 n, w$ [0 B' f};/ O! J: W' Z. c
% W0 }' Q' _" [4 j4 S) c1 \5 S \
static void led_dev_release(struct device *dev)9 ?; z2 V: ]+ }6 m3 L' t# Z9 @
{
$ X8 I% k$ W3 b) J" A: C. R# m};- n8 C, l# E+ m1 l8 C2 k$ }
. Y R# f( ]% y6 estatic struct platform_device da850_evm_tl_leds_device = {% L3 H( C- R+ }- Q9 }% @2 ]
.name = "leds-gpio",
0 s5 f3 ]1 r, v4 r- R .id = 1,; `* [ w+ I- U* ?& ^8 x3 J
.dev = {0 m5 }6 Z' ^2 g$ W0 c# ?/ K- E. Q2 I
.platform_data = &da850_evm_tl_leds_pdata,) k# F. ^9 s7 a$ u0 c* Y s
.release = led_dev_release,
0 G6 t, \! @* `- t+ {- {# Q. L3 Z }9 Q: ]; I" [7 ]8 N# `
};
, H& W4 L0 P4 N6 O
3 ^$ T _* c/ n9 M) }$ |7 r v6 V' qstatic int __init led_platform_init(void)$ R6 v3 s1 G" O2 ?; d+ j- e
{3 C. v/ q L( C; r/ R
int ret;5 l2 F2 L# q9 ?$ v9 [4 F7 A
#if 04 K8 p. ^/ ?5 L. a/ U$ E
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% J3 v! G. A. k8 d; e
if (ret)
$ ?' V4 m/ I6 Y W pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 x+ C5 U/ g9 }: d6 ?0 O( A6 w6 F "%d\n", ret);- h) @; O) F9 S
#endif1 i# o2 t0 h1 ?
ret = platform_device_register(&da850_evm_tl_leds_device);
3 B0 I( R( K: W+ z. ` if (ret)
6 o& [6 e2 }; i: M" @& x' ^4 G9 \ pr_warning("Could not register som GPIO expander LEDS");
4 y3 k( F% [* g) r$ ?6 J6 k$ | else" h+ }. H8 Z, i0 I$ l2 u8 R z [% T
printk(KERN_INFO "LED register sucessful!\n");
) j Z, Z: l4 d9 p, k; j% n) F# ~( `
% I- b- R& d% r return ret;( u- `6 i7 w1 s$ q q: ^# u
} ]0 d5 z! q- o3 N
: I8 E$ o8 \6 g/ |
static void __exit led_platform_exit(void)
% i- `6 o% R" B5 q7 [: Y+ a1 a{
4 P* ~! t1 b. _& b2 H7 G) O6 e platform_device_unregister(&da850_evm_tl_leds_device);
. v; z9 u* i& z' h/ J+ {
5 V- J4 ^# Y* C) B3 E printk(KERN_INFO "LED unregister!\n");1 ?: U9 C9 y0 p( g& b' t$ v
}% g. n h) i" b+ S5 u6 E
) u! c9 Q' L! ~3 A- d8 ` smodule_init(led_platform_init);
7 @% N: a; z& B7 Z* W% o$ hmodule_exit(led_platform_exit);% F9 ^% @1 c8 [6 d `. p+ P1 f8 V
& H! U# n2 C4 M1 N1 i8 X
MODULE_DESCRIPTION("Led platform driver");
* J9 ]4 w! |( B- eMODULE_AUTHOR("Tronlong");
5 ~+ `* H# ]$ I _MODULE_LICENSE("GPL");3 d' R1 n. k( _+ u8 W; i
7 ?- Q# f5 J4 b& q, E" V8 I5 ]
|
|