|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 ^6 S& c: E' e! g
#include <linux/init.h>
* F) R7 v* _9 l' s7 y#include <linux/module.h>
1 ] d3 K2 A, t" q( T: L/ R#include <linux/kernel.h>( s2 L2 Q: X9 j5 u
#include <linux/types.h>
7 h1 Z9 ^2 ^* H, W% z#include <linux/gpio.h>' ]: n" H+ [2 b/ U5 p6 `0 y
#include <linux/leds.h>3 l4 i7 c$ `6 E& v$ ?
#include <linux/platform_device.h>9 @- b# s7 n. ^
* V, k, C/ f M0 B' E' m3 r
#include <asm/mach-types.h>8 x3 o% |$ j) P; m C4 L! p
#include <asm/mach/arch.h># u0 _9 b4 c; l; T* }3 A& a+ P
#include <mach/da8xx.h>- O0 E0 q+ `, _' j! u$ q" g
#include <mach/mux.h>8 c- A0 Z$ {2 N, \+ H; M% G
% }& a! L P) y6 ]0 Q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' q+ G' @% f8 H; d" n! `& O8 X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ L5 v; @" O! l& a: N. ~) m#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 q/ `4 b6 i! T, b% f' W#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 u S/ ^8 b: q2 j
6 Y9 `& h- H1 l/* assign the tl som board LED-GPIOs*/
" ]. f( l/ w! v0 w' B$ Jstatic const short da850_evm_tl_user_led_pins[] = {! O3 }. B* O- H# r5 q& R
/* These pins are definition at <mach/mux.h> file */% c7 \, A. q( D
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" h$ r6 L$ l/ ?* j9 V B- z -1
+ R. y V, f3 a& c! S2 r};
& f1 H5 L& C9 a# A+ |3 [* h, V! O. L' y$ j j. N
static struct gpio_led da850_evm_tl_leds[] = {9 k! l1 e! l9 |; C
{
$ m8 Q4 N5 n( B .active_low = 0,% Z/ ~2 W) M7 J7 b8 y" e3 U
.gpio = DA850_USER_LED0,5 H1 H$ Z# P. @$ ]* v/ T* ]& z
.name = "user_led0",
# W1 |+ T4 E# U! e% m! W& R9 b& k+ X! m- X .default_trigger = "default-on",
4 C" v$ X; h6 V },
) d" L2 Z# q9 y, \$ ^ {3 q1 P3 e( [+ I- B# C
.active_low = 0,
/ m, t9 ~/ _. J% ]( J% k8 Y2 S, B .gpio = DA850_USER_LED1,! Y6 E+ y7 F5 q' p! {# @
.name = "user_led1",8 T; p& ^# \( @& B C2 q" O( E
.default_trigger = "default-on",6 @) E5 R7 s1 k' J+ K2 ~
},& P! @9 R6 K" M( u
{
, f/ B+ y- z1 k- i4 ^ .active_low = 0,
# D0 C: \$ p$ t" h( H .gpio = DA850_USER_LED2," R: N U4 @% j3 {5 q- @
.name = "user_led2",6 z# X( `! [- ?0 T$ g0 y# s& ]
.default_trigger = "default-on",
9 I3 [5 L5 z% j, M# @; P8 x) d },
: d$ z7 c5 @. b) k& W {0 A0 z( O0 _+ }- u" O" \
.active_low = 0,$ { [2 n0 y- n) ?3 T
.gpio = DA850_USER_LED3,
1 c' A3 G, F0 l- f0 J$ ^ i( S0 g .name = "user_led3",
" n5 M5 U* H. `- _4 y+ l9 { .default_trigger = "default-on",0 L3 ^, x' J8 r' \2 n" `) S
},
' O( o2 Q/ o$ s9 Z# B6 Y W1 \% _}; H( `7 z# o" n1 K5 @5 I
/ l3 p+ n9 ]2 h0 E) Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; U, m, @/ A8 y/ L* N
.leds = da850_evm_tl_leds,
8 G3 Z5 o9 X9 S3 V$ [ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 e% z% d, p3 W4 {' i- j};' c- C/ a. V1 x8 v; F* s" V! ^
, i4 m2 E3 z& D4 R& L6 |. Dstatic void led_dev_release(struct device *dev)
' m. W. }- b c( Z1 L7 I8 ~{
@* T$ J# ^# ]& m};: g, I+ K2 H: t6 M
; R8 y; q- X( g0 m5 c; c' Dstatic struct platform_device da850_evm_tl_leds_device = {
% {, Q. L$ ~! k$ x7 \ .name = "leds-gpio",
" a% n' A/ W2 {+ W( E .id = 1,7 d7 U# i8 E9 V A$ r' u( ?
.dev = {
* S6 q4 C% [( q- x( d0 Q3 l) p" g .platform_data = &da850_evm_tl_leds_pdata,
- O3 q) T; s$ b3 a8 I% g .release = led_dev_release,& X2 S+ `' z" G9 ^$ W
}
/ x+ J g/ d+ j, `! }. A5 f};
0 m" E7 x8 Z& y" ~. t/ ?
; A$ }, D. ^) e# ]5 t" T* Bstatic int __init led_platform_init(void)* J: C) K* g; s) y' O( G' w9 k
{
( H/ I: L7 p6 ~$ x int ret;3 a% N/ B% s6 {9 ?6 v, d
#if 00 Z2 n( ?& o$ F( i# A
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) E% Q5 e6 q/ A7 @* i& S
if (ret)6 ] K! Q( R8 Q% _5 S# p
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 }2 x1 ]* b0 r! M; }5 X
"%d\n", ret);
0 [+ X. u1 i* @: H3 K#endif- g9 ~) U+ L/ J& }' L
ret = platform_device_register(&da850_evm_tl_leds_device);3 a7 m/ O6 E; w/ j
if (ret); e, q5 { z) u* {
pr_warning("Could not register som GPIO expander LEDS");
* z3 _: d) @) j8 V else0 ?; p. `' w# H3 z, m
printk(KERN_INFO "LED register sucessful!\n");
. j4 y. b2 [% a& ~1 t1 S) T0 U e; G7 k9 F: P! l9 J
return ret;
. z& p, `& Y+ D+ P) S}& f- l& P( J" C5 M. C% |0 L6 w
8 v9 P( v& L3 F" P
static void __exit led_platform_exit(void)
3 l7 W2 K$ _2 v6 [{2 |& W" n( |. e B$ I8 ]$ D
platform_device_unregister(&da850_evm_tl_leds_device);
+ d# \6 G. ?# I2 w+ R
/ K8 Q( f2 Z: [3 f3 n printk(KERN_INFO "LED unregister!\n");" [& v) z; H1 w7 B* t# z" \
}: o! _" Q% K/ S4 o
7 V5 Y; _& K- Q7 q
module_init(led_platform_init);# _5 {7 B! Q$ W2 o
module_exit(led_platform_exit);
: w& u, Z) {0 u7 O
0 g1 }% G6 }+ cMODULE_DESCRIPTION("Led platform driver");$ {4 l$ m8 H$ X5 _( a' Z( x/ Z$ T
MODULE_AUTHOR("Tronlong");
9 u7 y e1 C" NMODULE_LICENSE("GPL");
1 N, [4 E' |. O5 r$ r1 ?3 N
1 N- w5 C" o3 F6 K7 t k: p |
|