|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 k, t8 B0 A- K" G6 v$ t/ Q$ g; M( _
#include <linux/init.h>2 {, B/ F4 q& N; {
#include <linux/module.h>
5 B; g- S7 e' G#include <linux/kernel.h>) y2 L u+ I2 c7 ~( `3 d$ R/ S
#include <linux/types.h>
' h, m' q; F& w#include <linux/gpio.h>
( C2 F$ |+ o# G/ ~3 f1 ]#include <linux/leds.h>+ [( K% \+ S8 I; ?
#include <linux/platform_device.h>
+ m; j' Q% D( b) s0 p1 d+ j' |; V2 {' E
#include <asm/mach-types.h>) D3 C' r0 O2 o% [5 y5 D/ V: ~
#include <asm/mach/arch.h>
a4 n: K0 a6 R, j#include <mach/da8xx.h>
" w3 E% b/ K3 v R. q; S#include <mach/mux.h>
5 R6 X* T8 p* ? {# I% G# j
8 z) b4 W' [! I+ Q: U#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 [7 v* h x" u' D
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 L$ g) X7 k: |7 Y- S% K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# ^/ I: g6 A7 o" L. {2 T1 J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, @- E4 `7 @3 @8 m- X2 Y p; A( I, G9 p3 e# t
/* assign the tl som board LED-GPIOs*/5 \! D$ x: L3 N8 k( J& m
static const short da850_evm_tl_user_led_pins[] = {: i" E4 Y" @; U/ s, }# J4 |
/* These pins are definition at <mach/mux.h> file */4 u+ T1 Q! t" e/ ?- J9 L) t
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; F* B2 L( E' P7 V8 a$ g) \0 V: Z -1
$ y" v2 c8 D5 k+ u' v};$ K/ E- _" L: {% O- z
O3 p! ~9 d7 q; \! V% x. [
static struct gpio_led da850_evm_tl_leds[] = {
9 I% [8 C7 Y! X4 A$ ]; R {
- r H+ h0 t: ^# H% V* S/ i .active_low = 0,) T1 u/ |/ C) x1 [3 k8 a: A2 \
.gpio = DA850_USER_LED0,
4 a" d( [' E) x& @ .name = "user_led0",5 V9 L: V2 k* |3 @3 }( D6 z
.default_trigger = "default-on",
1 F! d% `" t! w) p7 c$ p0 P },5 g; B7 u3 q9 k5 @* w/ X1 u" {2 _
{
( Z( S+ D7 `5 e/ T .active_low = 0,
- H, I9 J" |3 t7 L .gpio = DA850_USER_LED1,4 P, ?" i2 B( k- R+ K y8 ~
.name = "user_led1",
" Y+ w g9 W9 G+ {; ^) @ .default_trigger = "default-on",! @# O# N' J' i; v, S2 Q1 `; A
},& x( s x' }! ]. P* Q. _6 }9 b5 ?
{, `: p' ?6 _7 f
.active_low = 0,
8 [9 s: E. \& I# ^ .gpio = DA850_USER_LED2,
5 F( ~# d$ C, R .name = "user_led2",
& a, I4 E5 W) S; `; H% D .default_trigger = "default-on",, E- F$ C: G- K. U. \' I4 s
},6 J. h+ a1 B5 }9 ~: k
{2 M7 }5 G x: q* X3 p$ H' @( ?0 G$ D
.active_low = 0,
8 |5 X9 I; F3 e# g .gpio = DA850_USER_LED3,* r" e: `' _( u, p. c
.name = "user_led3",
- F( D' |' ^, Z' d V$ p; A .default_trigger = "default-on"," d) ~% t8 v9 q+ {9 X8 N
},9 l; S/ Q; w3 A8 p
};
' \0 G R: r: Z, N2 ?9 j1 X
4 r2 ?, v! N# [7 h' a. Y9 Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 Z3 q1 F# j! w .leds = da850_evm_tl_leds,
2 ^8 m ]' F8 v M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- u% |! f* J" {: ~, E; I};
* Z& X$ v/ H3 V1 c( Y, o; B& G% P
E8 w; T6 ^9 s w/ l1 Fstatic void led_dev_release(struct device *dev)5 y5 H3 n: H9 n
{
9 k" N T( ]/ F8 S4 j# x# _9 ^4 {};
, s, j/ b0 Z! |7 p8 X! _, r7 ^3 a) T/ @0 b) a1 }! T0 f
static struct platform_device da850_evm_tl_leds_device = {4 G3 K) z" E" p' u8 f7 P+ s
.name = "leds-gpio",
/ ]& ~- \8 F E3 P0 k" T) ^; @/ X* R, S .id = 1,4 t1 F# K {9 L1 j, |# q) J
.dev = {) y, { u- E/ w. V; b) u' Q
.platform_data = &da850_evm_tl_leds_pdata,1 o: W1 a/ `7 J6 }+ _, u
.release = led_dev_release,
* ]7 }6 W( u3 X* Z }
5 A+ r+ k" J+ e' R0 I0 U};
0 v* A, X4 y' V1 r. v9 V* v, z/ y* b; @5 _( n
static int __init led_platform_init(void); i% Z9 G/ c0 {3 j s
{
; S$ f" k9 T4 j+ s, A* p7 A: H int ret;* I6 K3 D1 G: C- H: k; Z! C
#if 0
$ |- d9 f! ~, V6 t6 S4 N ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ k; h% s6 D5 T( y! D if (ret)- F& Z% U7 D' M$ X9 s% _ `1 T7 C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :", D# U6 d6 n: @5 u( Y' x e- Y
"%d\n", ret);8 J- L6 J( u" z3 Q+ ^
#endif9 X6 b. D& c) {, B# ?2 F5 u9 e
ret = platform_device_register(&da850_evm_tl_leds_device);
* e5 {4 e% @# \- o- b' v7 v) G5 j if (ret)
5 J" I$ @" [. c3 l& v6 g pr_warning("Could not register som GPIO expander LEDS");) b9 y) V. M( A! A1 t
else3 |% P# V; |! q# t" Q$ ]; R, p" X
printk(KERN_INFO "LED register sucessful!\n");7 j- q9 K! h: {& `0 {; B; ^8 P
7 y- w" v% I8 y. ~ return ret;
- b) r' p/ P N; ]+ l- A b- ~}, z0 Y3 M) T$ }6 ~, v0 _/ z2 U
& S, H3 f6 m, C1 O0 L0 astatic void __exit led_platform_exit(void)
1 z2 E6 G4 d$ g. ~$ K5 d+ ^* G+ E{$ s% ]6 K! d1 g8 X& [ Z& u" P
platform_device_unregister(&da850_evm_tl_leds_device);
/ v5 [; w' }$ s7 k! u0 d; m
) U7 V& R" w. r% i printk(KERN_INFO "LED unregister!\n");
4 p( p9 Y z6 w" Q! |% r$ i1 T}
! [ M. X1 O2 B' V0 z- ?5 l
' ?; k8 p4 w. i. V0 Zmodule_init(led_platform_init);) R1 a- M1 q+ M: _ f
module_exit(led_platform_exit);
, e" ]6 S8 L u) m' q, K/ z* V$ {0 u9 ]4 I6 S6 L
MODULE_DESCRIPTION("Led platform driver");
$ q+ r( D+ v, L) ?. W) j1 [MODULE_AUTHOR("Tronlong");
. R) b% y4 k0 nMODULE_LICENSE("GPL");3 ^5 Z5 h* {& f3 X
# c9 e; e: N( [
|
|