|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 k8 [* f' n r+ v5 {0 x#include <linux/init.h>* C; F. c" L; \& Y1 H3 Z
#include <linux/module.h>- p# H" c/ Z/ v+ {' O9 T& A
#include <linux/kernel.h>3 [/ G$ f1 C" G" k1 M: z
#include <linux/types.h>
( u0 D% f7 G5 ~#include <linux/gpio.h>! b" u/ x' N9 v+ ~. ^
#include <linux/leds.h>9 t+ H+ \* G1 \; Z0 t# t
#include <linux/platform_device.h>( _& n5 N2 C4 |# c" _( {6 [
& i3 C. u* f9 a
#include <asm/mach-types.h>
7 e6 G6 G R1 j#include <asm/mach/arch.h>
! a/ d5 I1 x- d G$ I0 [" T' P#include <mach/da8xx.h>
- I7 t) s5 n* b#include <mach/mux.h>
! ?: B5 N; @9 y1 }' S- B9 Q$ x) S1 i- [# q. d3 K
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 a( f) y" k+ `/ D- `4 c, D' p/ I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 }% d2 z* q4 l2 f% I) V# Q% w& N
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
c1 ]! b, f4 T# H5 ]#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); f& f+ i' W$ W; q* ?' o
# l0 }- x+ G/ b6 M/* assign the tl som board LED-GPIOs*/- k4 q) u' z# v; j" `8 M. [, l2 U
static const short da850_evm_tl_user_led_pins[] = {
0 }2 L( f# s6 G$ X/ ?1 { /* These pins are definition at <mach/mux.h> file */ ~9 l6 Z5 t9 L) D8 o7 T4 \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* T) ^" U1 i/ ]8 u1 l0 G8 T7 o
-1
( w0 O i: l$ U/ M};
! n# q/ V# ]' U7 [: Z3 t2 F( n. c; P3 h
static struct gpio_led da850_evm_tl_leds[] = {
1 I+ H: q4 d0 \& k0 } {
/ w* [* [3 H9 Z# V: q p .active_low = 0,
* O! |! U. n; ~ y* W: B1 D( [; H .gpio = DA850_USER_LED0,
A& J& M w. k$ N7 v y0 H .name = "user_led0",! w0 n* v: s3 `; c) d
.default_trigger = "default-on",0 P8 ]& R1 F5 |
},
: \( T5 ? d3 F% b# K# @' K {! ~' n1 G% D3 J# V4 O1 f/ w3 o. w
.active_low = 0,% F, b- n. ~3 D1 R' k! {1 S: y
.gpio = DA850_USER_LED1,; v% L1 ] |& f9 }2 s
.name = "user_led1",, Q) ]) w3 n6 g( X0 ]/ e+ }
.default_trigger = "default-on",
8 o4 I& @$ z+ o9 d( q s, u },
; E$ C; E/ C+ {& B {
5 t# z- B" t( D, Y7 Y* u; @ .active_low = 0,
0 D& v* [6 o" ]+ i8 p/ @% | .gpio = DA850_USER_LED2,
8 ~% b! t X7 o! }( n; ^$ I .name = "user_led2"," f3 L M* m2 X$ N. O
.default_trigger = "default-on",: D& R y& i! F: p) q! m
},
* ^0 o5 j5 R7 X# h7 { {6 {0 W, r+ `1 t I+ e! \) S
.active_low = 0,
0 L+ ]0 j& i: V4 s" A/ ~. L* H0 n .gpio = DA850_USER_LED3,
4 G: z( {! v: a2 U1 o .name = "user_led3",- E T) a/ \. `. A: q' o
.default_trigger = "default-on",2 ]/ Q2 \3 i9 J" ]( m
},
# _( Q8 }4 `/ ?/ B: |$ D};' R" Q/ T* {. n, N0 V
7 c! |3 l! ~( s. O. \" Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) P$ q$ Q- j2 Z' F
.leds = da850_evm_tl_leds,
5 H- |, ~' W/ X- c .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 j) U4 i! d1 b! @2 V4 j0 h8 j};
# q! O0 }- W+ [5 N$ H0 e
+ T5 @* }/ M& [( i" Vstatic void led_dev_release(struct device *dev)
5 m; _! g. C; x& P, ~1 `{& ]; X2 W+ t- X$ V9 F3 K( R; k' \
};
& k9 \# d9 q; H$ N2 U( G- S U# m
static struct platform_device da850_evm_tl_leds_device = {# W. {+ i- ^, n
.name = "leds-gpio",2 L/ N4 [4 ]* g3 l& ~1 `& I% g$ j
.id = 1,% H# D6 u( S5 X' R
.dev = {( c& D. f. j6 M! @- }
.platform_data = &da850_evm_tl_leds_pdata,/ x% M3 f* z/ h
.release = led_dev_release,' O$ l& m+ X0 z: ]6 O% y( Y
}
4 F) h7 I* l% C5 \' f. y8 o3 k7 s};* J1 J5 B; ?: R7 E3 \. H2 ], @
- @; ?7 p. I2 q# n! Ustatic int __init led_platform_init(void)8 C, o1 E! D8 _* v8 v0 a0 p4 j
{' z* D% Y; J. U2 a! [; t0 |
int ret;
/ C% N( t% C9 ]+ T/ ]; M#if 0
' h* T' S" V! f9 D3 ]8 `& o$ J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 {, r0 I+ v) ]2 W# E0 I if (ret)6 t2 @3 p- K4 b, j; _
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 N) W( ^# A- q, n/ P "%d\n", ret);
7 z0 G5 F& n) t1 R#endif( ?, B/ x0 m V! s- C) X" G, [. B
ret = platform_device_register(&da850_evm_tl_leds_device);
* D9 n0 R, Y5 s' M if (ret)
) ?, h5 M% t, h4 W pr_warning("Could not register som GPIO expander LEDS");
6 C, |1 ~) c# F0 k: S4 P, a& Y else: W$ Y H( Y/ ^5 U9 }
printk(KERN_INFO "LED register sucessful!\n");2 H% B5 H1 M$ v
, a* C- ?! W! o% K) y8 O/ x
return ret;
3 P8 o2 Y/ R" C9 @( B0 O5 d}
F$ d1 @5 |5 B* T0 d
% A. ^0 h0 N4 y2 `static void __exit led_platform_exit(void)
, A1 S2 x! s' m) D{" U* Z. b- j4 p2 R
platform_device_unregister(&da850_evm_tl_leds_device);6 l, H+ A) B! S O9 i
/ {8 z+ K' Y; L printk(KERN_INFO "LED unregister!\n");
- \+ n8 E1 W9 |# l3 ~( A+ U! e}) m0 j( o( J' p( O* K
; [& b3 G+ ?( l; i) M
module_init(led_platform_init);. c. {9 c* M- U* S8 q5 T$ ^5 w& k
module_exit(led_platform_exit);. D7 v! m% J3 p* a
/ f7 k4 I/ z B0 HMODULE_DESCRIPTION("Led platform driver");1 o: X' w+ F- r9 P' Y" {9 ^
MODULE_AUTHOR("Tronlong");
3 Z* Z8 j n8 P0 MMODULE_LICENSE("GPL");) o3 ~ j' m; o% H
& i c& E/ o( V& d: C |
|