|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& a9 G' h. g. m; _#include <linux/init.h>
- n6 d- x% D& m, J#include <linux/module.h>* Z: \! k1 f2 l# `4 w# A
#include <linux/kernel.h>
6 l& X/ x$ r/ `0 [/ D: a#include <linux/types.h>- i3 E# [/ P& X6 s5 G
#include <linux/gpio.h>
" T' b+ d! `: k9 |$ [ ]8 y$ r! h% ^#include <linux/leds.h>
m' |5 w5 `1 i- J) o! F9 |#include <linux/platform_device.h>7 p* L7 ~: x; V% O2 B1 @. u
4 f9 C9 Z# s# d% m- T#include <asm/mach-types.h>
6 j9 C( }4 K6 X#include <asm/mach/arch.h>
9 u4 u& H4 W# {% F G, w3 L5 X#include <mach/da8xx.h>* t/ n5 {5 q$ C9 x# G/ y$ ^0 R
#include <mach/mux.h>
0 L2 {+ c6 F5 a8 f
- i; m, S4 d( F7 q5 Z1 O#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 N- j2 F- ^9 r& z) G7 M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( }8 H( W2 ]9 C
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, i+ P6 D/ m+ W' I! X6 K. n; A#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 K7 k$ F9 J) w0 Q s6 {' ?: R4 z1 t1 W+ {
/* assign the tl som board LED-GPIOs*/
- o! U& O( _6 Ostatic const short da850_evm_tl_user_led_pins[] = {3 V$ ?, |/ P1 F3 E2 o0 y9 M* V
/* These pins are definition at <mach/mux.h> file */; u8 T% f5 B# }) w9 i; M' k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 g0 {. Z4 S# X, F( H
-1
. I9 P! [5 o+ T8 {" `};% Y" S& g, Y' \. m
3 I# \+ k/ M) O' i4 Ystatic struct gpio_led da850_evm_tl_leds[] = {/ a# ~% [/ V" t
{
' T! k7 o1 } K5 i4 w& v .active_low = 0,
9 C4 P. q3 S( ^ {+ Z .gpio = DA850_USER_LED0,( e2 n; ]6 F- Z
.name = "user_led0",
6 |- _- b1 d% P .default_trigger = "default-on",1 T, N. S, u6 b! o4 \. a+ L
},
; E+ c9 x9 g/ g2 P {
& q) I0 i9 F' k `: h! v5 l .active_low = 0,( y, W l- ]8 Q0 n
.gpio = DA850_USER_LED1,
* u; g& Y! i i/ w! K .name = "user_led1",6 p$ a8 S5 G }4 q' L/ H! U
.default_trigger = "default-on",
0 R/ U' E, ?7 F },! ?: |' L$ t& r
{
' R. }+ Y3 r$ `& K7 j .active_low = 0,5 x, ]1 T$ F) U
.gpio = DA850_USER_LED2,
/ D4 h5 Z; p3 J .name = "user_led2",
0 V& Z) f" t' y6 r6 X .default_trigger = "default-on",
3 L' R' u0 M+ Z. e, \' X },
2 C! J7 r1 i4 B0 Q! X f& Y {. N' O( k! J9 x* e! N; a& V
.active_low = 0,
* [; O: k! |9 j. i% X/ { U .gpio = DA850_USER_LED3,6 b, ^; T8 |4 i4 B& M" o
.name = "user_led3", k% g, v+ ?* Q* n6 e/ p* b; u
.default_trigger = "default-on",
) W. {- o# h$ {# L; k! ^ },' z: d- i5 O4 v) _" @
};
( ]$ J( L! |5 n0 h5 W$ k. D& c
. r; J l" Q5 P. ~) d+ v- ?static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. v. W; A, O9 B: P3 ~ .leds = da850_evm_tl_leds,0 J% Z. ~1 n: N+ g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),, u$ t. C3 Q2 H) T# z' W* Q# c
};
' I H& O4 V& \, B. Y
' s; J7 l8 t8 x# O9 g8 A istatic void led_dev_release(struct device *dev)- l/ G7 Q6 `4 \. t& x. V7 W; a1 g
{
+ r0 ]$ ~7 n2 W5 @9 |};1 \- [. Q" T+ v/ ?2 g( I
, r& |- V, U# q7 J( j c
static struct platform_device da850_evm_tl_leds_device = {
1 t' `+ R( g3 _. Z+ _ .name = "leds-gpio",% w0 r; [( b. `3 `3 \6 U
.id = 1,
: I) n4 ^) t1 e3 U .dev = {! ?6 A" A- s u$ e+ w# }% ~
.platform_data = &da850_evm_tl_leds_pdata,* {9 k ]9 s0 v4 j
.release = led_dev_release,. H. {7 e4 _; k% [
}
2 F+ ?" v3 l- ~# H0 h u};
y: o7 l# t A- E7 j/ Z
5 f9 N% F% h* Xstatic int __init led_platform_init(void)
* u3 B8 K* q% F* f3 U5 v{
1 L( M E4 Q0 K3 T T2 H# r int ret;$ z! f9 X3 s' H
#if 0. p- T6 {- G% t+ r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 G% l* |8 _- i- B5 c
if (ret)
5 |) `( J! V" ], J2 S* j pr_warning("da850_evm_tl_leds_init : User LED mux failed :" m4 W, Q# i5 b4 y$ t) C, U1 T/ M
"%d\n", ret);* n6 B$ \* ^& d6 }' R
#endif) L+ t: r, P' Z! L* s. F/ Z$ R) r
ret = platform_device_register(&da850_evm_tl_leds_device);- j6 X6 ~% Q# o. D0 w Y
if (ret)
9 P9 M- w5 K( J# B! g4 w5 u* { pr_warning("Could not register som GPIO expander LEDS");3 Q' [' X, m; P
else6 Y- g. U( V, U5 m2 L2 ~% v- _
printk(KERN_INFO "LED register sucessful!\n");
$ f0 N6 G C0 a" C, \5 R; y7 U- |3 ]7 O: p+ {' \, ~
return ret;
8 `7 i6 D1 h" y) w$ `}" c0 N: _/ P6 G e4 B: k. c
3 l$ h4 B6 N- u* \* B
static void __exit led_platform_exit(void)
1 w; T7 e8 `3 U) d* n{2 b5 F2 U$ q$ \8 ~) h( C
platform_device_unregister(&da850_evm_tl_leds_device);- Q# g" n9 v: C9 u
. E* W) Y6 X) Z. C: o ]
printk(KERN_INFO "LED unregister!\n");
# R( N8 Y8 C$ H0 l% C1 x! z}" `7 o9 n: i2 z9 O8 u8 q
3 S$ s3 D+ t) Z% @6 `) Y
module_init(led_platform_init);
; ?2 R# t. j$ V; T( X0 fmodule_exit(led_platform_exit);, B/ e8 f7 d4 p7 g3 A7 D
! t* O8 ~* d- a( s- M) x; p
MODULE_DESCRIPTION("Led platform driver");
! n# R- N- y1 p9 |, ?: ~, A3 C( {1 Y- dMODULE_AUTHOR("Tronlong");
2 V) C. S, d3 i/ T# oMODULE_LICENSE("GPL");
& f* O& \+ L- v# W& x( ~0 s7 d- b5 v6 G" B
& J) Z' T: s0 s' X9 C' G8 M |
|