|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. M; o7 U( T# o7 Y1 d# A#include <linux/init.h>$ Q) q0 u# g6 _% p+ _( m
#include <linux/module.h>
3 {' v" F. O& x. H5 h#include <linux/kernel.h>
; h5 |1 i( b$ G6 Z) d#include <linux/types.h>. h: j$ b0 j- u8 a
#include <linux/gpio.h>
' i. d6 M# T# T/ j4 z& ^#include <linux/leds.h>
5 o( R1 b; y* X$ V5 q& `#include <linux/platform_device.h>" ^$ ^1 N4 N2 F( A/ E5 N& n) }! a4 Q
( P) A& f; s2 D/ }* f5 T" L#include <asm/mach-types.h>
$ g z$ c, |; e4 h8 }#include <asm/mach/arch.h>* V& ^4 _* E' }4 g
#include <mach/da8xx.h>! ^- x2 I" o+ b7 u0 q$ x
#include <mach/mux.h>
/ e# @7 Y$ t. O% u3 D" \2 ^! m- P: O0 S+ ] E( Y" f; U3 e; O1 ?
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* ~" Q( M( B. y! ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 w- R! p* j1 _/ G+ d- d9 s' y# y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); K8 O% b o# X4 `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ X8 b8 P6 L2 S' M
% }3 N# A, ~1 D6 @4 O1 L/* assign the tl som board LED-GPIOs*/. _ F) {7 x" z; q6 Q2 t
static const short da850_evm_tl_user_led_pins[] = {0 d6 R3 E2 H% R* k8 V+ z% I3 B4 o
/* These pins are definition at <mach/mux.h> file */! A* W8 V) f2 K0 X. L! W7 i; y2 P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
n% C: h4 [5 g" _# n4 R -1; J, @8 h! w7 `1 p9 V4 j
};0 q7 m$ a, `/ [- W! j
- _2 r3 J0 d/ Tstatic struct gpio_led da850_evm_tl_leds[] = {& R3 u% A p9 g! ]. X1 E
{8 k* R, D$ c$ S9 U" `- \+ T9 V
.active_low = 0,
% o) e) M) M8 Z% ` .gpio = DA850_USER_LED0,; q; m& s& p( D" M: Q" k& F* t! N
.name = "user_led0",$ h* ^+ ^- n* e/ I h
.default_trigger = "default-on",8 d! U- g3 d3 W% }
},
/ C' ^: ]5 t3 ^ {( }5 m/ X* E7 a& A2 g8 ?% V
.active_low = 0,
+ `5 `8 q4 ^) B .gpio = DA850_USER_LED1,. `. a5 r" b2 D4 p# s
.name = "user_led1",
2 H" J( v$ S6 \5 l .default_trigger = "default-on",. l% a7 R8 D2 u) B2 h, L/ h) [! D7 q4 j
},2 D6 {6 T7 O# H9 ~8 Z
{
) T7 B E7 [4 x4 e7 } .active_low = 0,# L5 m( Q$ ]) w- b
.gpio = DA850_USER_LED2,% g; I+ S7 _. W
.name = "user_led2",
: o4 |/ K/ q0 n ^ .default_trigger = "default-on",
. Q4 K( f% K6 E( o( J5 l: E: x },
, _( ~" D4 B+ ~! x. [ {( R9 p% \% e9 _. L
.active_low = 0,1 z O3 }" ]0 m- G1 @
.gpio = DA850_USER_LED3,
M% X, f, k+ k .name = "user_led3",2 n9 |# n9 w e
.default_trigger = "default-on",
& ]5 H7 I2 @, k. r },/ t: K6 m }: p- C, |7 ~
};+ p1 e! k) G6 a/ |
+ z8 b" _, z0 A! Estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ d- c" f- `' O) J" q# b
.leds = da850_evm_tl_leds,; A/ o) c" K z3 `
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ \" q5 E# e6 I, D# N r
};
' V( Z4 X2 b: q* @2 d. U
* } Y9 z; A3 Y$ r+ Q7 ]& hstatic void led_dev_release(struct device *dev)7 t2 k/ h, h5 X" a+ b( @! \6 w
{
2 Y7 {8 H6 _3 R6 b* W& S8 v7 w};( n& A0 U2 L* t
8 I- c( A7 c/ T
static struct platform_device da850_evm_tl_leds_device = {1 ]# B; L) E' v
.name = "leds-gpio",5 B9 u) f4 E% c4 S3 Y: I. p
.id = 1,' U( q# z: \3 e3 f4 s
.dev = {
4 b+ J. q( L8 c+ | .platform_data = &da850_evm_tl_leds_pdata,
" j& z( p0 o# m; j .release = led_dev_release,
X/ V( R5 \" O* a' S }
$ ^0 Y6 `3 V& r; b! R1 d% G};
3 x: ]1 x8 {5 J3 S# m
& i7 S' h; L8 `' F' ^# s7 r# v- Fstatic int __init led_platform_init(void) f- |. ?6 H6 e9 c) M
{- y- f* I7 v0 \3 a2 e0 r& K
int ret;
9 f5 U2 {# w, m6 Y. o' i4 T#if 0+ X* ^' D: |" J: {8 K' a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! L6 m0 _- e9 w3 Y$ z+ @ if (ret)8 Y+ m& m' v' k' s
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) ^5 A. y% |# f* `: W# \/ z "%d\n", ret);3 x! P. a. m* Q$ E
#endif
# s3 F# o; v% L9 n y8 P ret = platform_device_register(&da850_evm_tl_leds_device);
; p+ ?$ r$ {0 v2 H if (ret)( w5 y9 E% |* M* q/ V
pr_warning("Could not register som GPIO expander LEDS");
+ N0 |4 ^9 W& C p/ u9 ~ else
& | p7 ?$ v& a( ?, S6 h' `+ I printk(KERN_INFO "LED register sucessful!\n");6 g) T, V7 I0 H# N t
; p/ f; W$ e0 ~ return ret;
0 ]8 i) E, Z# E2 \}
2 [6 U5 J: C- r3 g3 Q4 ~( d2 t0 x1 w" B E) \* i' k# n
static void __exit led_platform_exit(void)1 j7 d' O/ ~ w. Q# N+ D8 T7 v
{ A" b9 h; s4 ?
platform_device_unregister(&da850_evm_tl_leds_device);% h2 u) G! v6 D% k
_/ a! j- c6 H) | ?0 ^7 C printk(KERN_INFO "LED unregister!\n");: N" K$ W$ G, O- R& f( q0 W
}+ Z$ f' n; c+ v% q5 s: S$ I
7 s" t+ n( ]8 Z8 c+ T# Z- M$ Y) Wmodule_init(led_platform_init);
' Q8 ^% D2 E1 ~/ l7 w p3 h& Kmodule_exit(led_platform_exit);+ V1 c4 {1 l7 N0 Z
4 d+ D0 Y/ a9 o* E2 R
MODULE_DESCRIPTION("Led platform driver");/ [8 Z( N$ G' n1 A0 H( f
MODULE_AUTHOR("Tronlong");
) A% {- a# v: G# a1 }2 \MODULE_LICENSE("GPL");( p% u9 }* t3 N. K0 s. C' A! T/ M
! e/ v$ x; G# Z! P; U
|
|