|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 {+ q8 c4 U& \' [7 _' M
#include <linux/init.h>9 G% v2 X- K& ? ]( s1 R
#include <linux/module.h>- z, |+ L5 w2 D
#include <linux/kernel.h>
6 _5 {6 v% U& Z4 ]9 R0 |#include <linux/types.h>
) D8 h: _. ]) M% E* j0 v/ M9 N#include <linux/gpio.h>
. H1 w# a/ H7 `9 o% B% V#include <linux/leds.h>. b- O' _+ t, z; q! n
#include <linux/platform_device.h>; t, S, Z* x% w& d% S
H) \ L+ u- P h# \#include <asm/mach-types.h>" b+ s z" D: L
#include <asm/mach/arch.h>7 m& @* @1 A; k" b) m0 z g
#include <mach/da8xx.h>* l+ k0 G1 H; Q
#include <mach/mux.h>
+ x4 T, ]% ]* }4 W( X7 w
0 G. a5 g: k% C0 v' e#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 h+ D' t$ V l9 h4 p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): l1 H9 P7 T f; W9 X& O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), F# q. v! \2 r' O. u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& ?- e$ i9 l2 t* B4 r/ N
% t. P6 `. b) Y$ r/* assign the tl som board LED-GPIOs*/
1 [. x! g$ t' ~6 e1 z; \, Cstatic const short da850_evm_tl_user_led_pins[] = {
0 p/ i* f/ ~% y) s, ?& J" R5 C /* These pins are definition at <mach/mux.h> file */
, R+ h7 {( m+ W! w. k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, V. D: y t5 R4 b# _0 I( N& e# L
-13 Z( O7 @. ^: O. s- C4 ]% k. t
};2 `6 ?7 V6 ^) \4 {0 |. e0 j5 |3 L
r" x+ o7 A7 [/ B/ |, @: @& s
static struct gpio_led da850_evm_tl_leds[] = {! G9 @1 ~! h( x, T" t$ C
{
. ~* k- h' l6 y4 b: E .active_low = 0,* ~8 {* U+ J4 h3 |$ j
.gpio = DA850_USER_LED0,
' J, I9 H+ M) E% i7 b7 g( c+ p .name = "user_led0",
% O% X8 f( u) b$ k/ B; o .default_trigger = "default-on",; o& V% w9 ^! a
},5 ^7 V y. w, T
{, ?8 t7 R( H* \/ f4 u
.active_low = 0,& M1 [% J9 d$ H& `% ^& @% q& e0 H
.gpio = DA850_USER_LED1,. w' d* D5 T9 U
.name = "user_led1",4 C- ~4 J- P8 ~5 U6 c$ D1 |
.default_trigger = "default-on",
9 h4 o: w1 V2 R% e },* K( N7 e# N( ]$ a$ @
{
8 q, n+ ]5 S; }. w8 i .active_low = 0,4 K9 T6 | R+ U2 }$ Q7 y
.gpio = DA850_USER_LED2,
$ n- |1 L3 r% }* Q$ U- f1 h .name = "user_led2",
* \8 b9 l) p7 T/ N9 O8 i( r2 ? .default_trigger = "default-on",- E8 {, w/ s' P [% g3 q8 W
},
" d0 ?7 n( M- m9 i+ H6 f4 v: E {* |( `$ X3 t# i6 G6 K Y
.active_low = 0,& V! C2 I: Y$ Y# Q* \* {
.gpio = DA850_USER_LED3,
/ |. S t/ K) ?! p4 c .name = "user_led3",
* q- X3 a h" ^0 }4 e! x5 T .default_trigger = "default-on",! x8 k2 B+ `, M) R! B& ~
},
3 n* i7 e) ` J" _% l+ `" t};% P* a, [2 G6 u$ ], r
5 C) ~* S! ]1 I V6 r
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: H+ m# D3 g" g9 {" c Y
.leds = da850_evm_tl_leds,& R+ W9 h: _2 G o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- q/ O5 {$ i7 b6 u; m- O; P: b* E
};9 P& [; g1 {$ K" c' V
8 E, k6 f9 H; u/ w j! ]
static void led_dev_release(struct device *dev)
0 X$ a4 p3 g6 y r" ^ n& z{
2 o# T/ m0 u( ^; T$ T7 S};
# `" i5 c" ~4 Q5 r' U4 Q5 h
% H6 i }6 ]( _0 _9 O2 \' vstatic struct platform_device da850_evm_tl_leds_device = {
& r. p6 Z/ J8 O# B( H% x; K& t .name = "leds-gpio",
; d1 y9 b( ]4 l: P0 V+ W. j1 J .id = 1,
$ g8 I V5 i% u" }7 W; e7 q. | .dev = {0 [2 M( D. ]5 A" t' c3 ^
.platform_data = &da850_evm_tl_leds_pdata,
$ k; Z7 j$ @! g .release = led_dev_release,
- ~* p: p8 [9 \! w# i2 x/ B! L }' K6 E( c, Z& `1 o) Z) v
};
4 G N# q. P4 [& |9 [4 O$ x7 w- G, Z/ q5 |, H1 Z! y, v* {
static int __init led_platform_init(void)3 ^8 } N- i& n- e
{2 W5 @% b( m Z( A+ p" B
int ret;
9 h1 G# k8 X+ B, x/ q8 s5 a# g#if 0
" \: q8 I" h1 f) u' D/ X& v7 ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 z- i& G3 \5 @
if (ret)% c# r$ @( s; P |" X" `
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 T. L- E6 p% G6 W5 V
"%d\n", ret);
3 r9 x2 Y& b$ n8 h#endif# `& O3 R, G: _6 ]" _, m
ret = platform_device_register(&da850_evm_tl_leds_device);
) e. l: ?; o6 n; i if (ret)) ^9 E! F6 @6 Y4 ~/ s- K
pr_warning("Could not register som GPIO expander LEDS");0 F& G7 K' i' i* f# l0 c
else
6 b7 E9 p1 |# ]( X& u# Z: o3 r printk(KERN_INFO "LED register sucessful!\n");# O' D% U- ^+ r9 ?! R5 h
1 Z. e0 m2 E* B/ v/ A- b
return ret;
% p% d1 m7 j( W1 `}- T+ r0 ~% ^( b& c. A
8 }$ L% A& S( X n/ C- z8 d: d
static void __exit led_platform_exit(void)
1 T/ o5 z7 q2 Z' a8 ~{) {1 h, _( b5 l% o* |7 e
platform_device_unregister(&da850_evm_tl_leds_device);: t2 ]4 X* M2 H# K! U) Y$ e
+ s d6 z9 B+ \. x
printk(KERN_INFO "LED unregister!\n");
1 [9 e: }* t6 @& V' @3 `}5 w3 D- G4 Z! m. o; }# R
* l l; @* i( B. j( k
module_init(led_platform_init);2 O9 z, f6 W. E! ?
module_exit(led_platform_exit);# h# ^, c6 B8 T' I2 t- p; I: a8 o
8 p6 y* M1 `3 L5 }MODULE_DESCRIPTION("Led platform driver");
) d. q% Q5 l; r4 z8 UMODULE_AUTHOR("Tronlong");* }( u2 i) R* Z0 G7 Y' j
MODULE_LICENSE("GPL");
; p/ q7 r- N- {$ |
, N: R$ a$ Z# m |
|