|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 R* `! ^( Q# w4 K% x" T2 T* o4 ?
#include <linux/init.h>2 n- Z- F7 r! Q# g
#include <linux/module.h>
3 J4 m7 t0 P7 R! r# I#include <linux/kernel.h>6 E, X) ~: @" u; _0 n& D1 K/ U, ]
#include <linux/types.h>
y. R- N/ A4 K6 C4 {8 k#include <linux/gpio.h>
5 R b( d: p. _, {) X#include <linux/leds.h>8 D J1 C0 q" ]2 n
#include <linux/platform_device.h>
3 z( g* ?( _* A$ i! N5 m( @$ B0 a3 f" f5 J
#include <asm/mach-types.h>: I: f$ b! v: j% F
#include <asm/mach/arch.h>
8 O8 V5 r! i; M# V; s#include <mach/da8xx.h>) R8 _) O' l* `' `8 C1 A; Q+ T
#include <mach/mux.h>
( ? z: t# A% t" F( u
. ^+ w( h! j# o% R. [( S* _9 z3 L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' y i* t B& z& I5 V
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 s0 N6 ~) y3 U+ A! H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) J8 k1 T! Z5 N0 I/ r4 m- l7 x( v6 l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* k1 R4 e- a [
( B. ^6 N/ r) s; y6 M/* assign the tl som board LED-GPIOs*/- W: S# @+ e; J. Q9 z. g
static const short da850_evm_tl_user_led_pins[] = {
! U" L: o, X0 w% l. K6 x* `, [1 W /* These pins are definition at <mach/mux.h> file */
% p3 k( c4 r9 E0 W, C! C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 `$ S4 y( M4 `6 Q* v( \ -1( v, k& b1 I9 Z& u2 S) U- ?) @
};% e/ ]& h6 \, B+ z) h9 t. O
$ F6 E$ ], W7 x) p% ~. M
static struct gpio_led da850_evm_tl_leds[] = {
5 x; e# f& W. { {0 V- y) l0 i) T: X
.active_low = 0,0 r8 Z8 v% L. O- Y5 E) m7 v# F7 q
.gpio = DA850_USER_LED0,
( i2 l! H- O: f5 H5 O. b) B .name = "user_led0",- F$ W E) |/ }9 B6 a! K) {2 A
.default_trigger = "default-on",7 @* X" O, G: D9 m' J; z5 {8 j
},
; K% W( ?9 b1 Z" Z {+ M& H- R& n* U- y4 K1 f
.active_low = 0,
% e% o7 ~ f V! m5 i0 C .gpio = DA850_USER_LED1,
- i6 u7 P0 f, g$ @; F .name = "user_led1",$ O1 t# M) S) `" s5 q' d
.default_trigger = "default-on",
2 |5 M* p) |" g' m' w2 _0 O5 \ },' h: s+ w- E% W8 |6 T
{
5 d3 p. e1 G, n7 r! b .active_low = 0,2 o% _: r1 t, ?% k
.gpio = DA850_USER_LED2,$ T" ~' n$ x4 @9 S# t, {
.name = "user_led2",
( T6 {6 Z* ^2 Z5 E8 j8 V .default_trigger = "default-on", `* N1 I/ e" e
},
" @4 G. S/ `, O3 s' w7 o {$ P+ E! t7 V b- b% O
.active_low = 0,
, x/ B# B* t; C2 p# K! F .gpio = DA850_USER_LED3,
. }( M* \ R5 x6 G- F4 ~! U0 }# X, B .name = "user_led3",
# l* b: |3 c. ?: Y3 g& T8 s .default_trigger = "default-on",
: C" d& h% @- i6 P& g1 Y },
7 s1 ?" Z3 [! q8 k* _ D3 a% i};
3 }8 ^9 e% Z2 H9 _8 s! ^- x* J8 [4 g6 B1 U& n
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 [4 N' R$ {3 M- I6 J
.leds = da850_evm_tl_leds,
7 o9 j; I" A# n* K8 q1 A9 g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& z& {: W! N. |$ r0 A};' P5 d) s2 D/ M* P
+ J$ x9 `- K' L# [- y c
static void led_dev_release(struct device *dev)5 t2 l0 P5 k0 I8 s# u; }5 W
{
$ I( N& p* a1 o. d};
; b0 k8 y( v. Q$ J5 D0 c0 F+ y: C9 m3 o
static struct platform_device da850_evm_tl_leds_device = {
" g) `. B6 A: @/ o" C; p .name = "leds-gpio",
, m0 N7 M/ a _ a9 x) t) \7 d( J' V* y .id = 1, l6 F; g ]+ Q/ A
.dev = {
; T- y- u1 I# V& z" g) S& j V .platform_data = &da850_evm_tl_leds_pdata,/ u: w' _% q1 S2 l" P6 p8 b
.release = led_dev_release,, ~/ x$ R0 D2 _4 f
}9 h5 j# N0 w, R4 I% u- } [( l% B/ x
};0 ] d5 g1 S4 o( ?* z' u
% l8 j' K0 @ ~6 G0 V' G& a
static int __init led_platform_init(void)
. m, E" ~2 @3 u- [% n9 `6 i4 v{
' [; P! q3 I1 v$ } int ret;
' [& ~4 i6 K0 u6 N& T* V3 M#if 0; ^% b+ o- c" ?$ A H4 w( V
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); k* Q7 B, Z0 O A% k
if (ret)
1 p' J% r' F$ i% P! @' | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ H* r& D& e: B. u: i5 r2 B1 T" M& _ "%d\n", ret);* b- m. h7 l# S" T+ A. I
#endif3 ], _2 G8 A# _' {7 g
ret = platform_device_register(&da850_evm_tl_leds_device);& [3 ~ d+ n+ W% Y4 l+ H% |
if (ret)4 w$ j, f% d: Q! V
pr_warning("Could not register som GPIO expander LEDS");
2 i. L% T! b3 @( G; F else
, A4 K6 }! n. A& y W& I) R printk(KERN_INFO "LED register sucessful!\n");7 w' ?" P: e1 {4 ]9 S" e8 Q7 x
/ W2 F5 \6 p( v0 f
return ret;
/ d4 ]: Z, I. E) S- }}
" W; R2 g) j% q& T: P1 }- b# A6 {: Y! v: i
static void __exit led_platform_exit(void). p B( s( A! E4 A
{
7 j& V( S- F3 Z, [! } platform_device_unregister(&da850_evm_tl_leds_device);# [1 O. Y" P# ?
8 @) u |' L, @1 Z$ z- \% s. Q printk(KERN_INFO "LED unregister!\n");+ ^3 I# z8 y1 J' v/ P
}$ H) [$ v0 g, N
2 x9 i, t v* [# c$ U
module_init(led_platform_init);
9 s3 a7 h' {0 Q0 z+ M! v% lmodule_exit(led_platform_exit);& ^! y) P& Z# ?: y9 N3 X
3 F/ V, O3 ~5 x5 g9 S0 W8 Z+ ]MODULE_DESCRIPTION("Led platform driver");
3 J- B& x6 {% E! ?. ^6 d0 FMODULE_AUTHOR("Tronlong");
: t: R5 s7 j9 c) g; d/ {MODULE_LICENSE("GPL");" C5 r! Q' _ z. V+ e ]: ^
/ u/ D9 m2 `' v7 {# f1 B/ V" J5 A |
|