|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% v1 |/ z3 Y) Y4 l3 y; W! V. J
#include <linux/init.h>( z% g* g" m6 i* K' K# [3 o$ R
#include <linux/module.h># y o" n/ j1 U5 t- n1 ^; Q2 Z
#include <linux/kernel.h>
8 e p8 H! c8 L#include <linux/types.h># R# h; S* f- [1 V1 ~8 B4 B# D3 b
#include <linux/gpio.h>
# p+ K M- {" _+ o9 S! M( i9 G#include <linux/leds.h>
8 [0 b5 v- p0 ?, y% r( J) E#include <linux/platform_device.h>2 q r4 o7 ]+ ?7 H
; k/ y3 x M/ z0 }& v9 o3 {8 @- J#include <asm/mach-types.h>
4 R& ~+ B& n, h M# m#include <asm/mach/arch.h>
" o6 z9 X6 Z8 _( g& X0 V#include <mach/da8xx.h>4 u' L/ [6 {* B5 P0 I0 O
#include <mach/mux.h>( T6 ]! r2 b" k# k6 a- D
0 U/ _& ~3 _+ i' s( F) @
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) l3 ^+ d' K: c: [- r5 n) W8 E
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 \% a# z/ z" T% T& L$ A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ F; K. C( g B9 c2 U. N#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 C) E! n' i! }; U9 b; r$ P, O) ~$ e* b$ }* F% k/ A# _" J
/* assign the tl som board LED-GPIOs*/
/ b4 @0 T) c# Y/ `; Ustatic const short da850_evm_tl_user_led_pins[] = {
% \) B! N- b. l; ` /* These pins are definition at <mach/mux.h> file */0 N# _4 H" j. N" `' i% ~7 C7 d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. R9 o& l; `7 \7 g5 z -1
" `, c) E ~9 u/ K# j9 p};
2 x) d* X6 w6 g/ O* j8 [$ I' J$ V/ B. |$ H
static struct gpio_led da850_evm_tl_leds[] = {
8 Z, {9 x: c. C2 e& \ {8 P1 u" W- ?: M* s6 M
.active_low = 0,- k. j. V9 F6 I) e# [
.gpio = DA850_USER_LED0,
7 p# j+ ]9 |7 ]. k .name = "user_led0",
! \1 A1 V$ o3 h. q$ i" P+ o6 K .default_trigger = "default-on",
" K) s4 t; N2 [) `7 Y* e },/ R/ e3 i: _* _
{
. h4 z6 ^) z7 }+ u# s8 P6 u .active_low = 0,
* L1 d2 c( L% [; s2 e .gpio = DA850_USER_LED1,
/ S( V [+ ^* o, o .name = "user_led1",
8 n; d& k) r% f .default_trigger = "default-on",
$ q. P4 K7 x+ u c+ Z5 ?( ~ },
5 L. t9 M$ M, b* p" y9 l. @( J# a {8 \+ U" L0 Y6 M1 r
.active_low = 0,
( m7 s6 F8 H0 b .gpio = DA850_USER_LED2,# ]0 W3 T5 L1 i( F4 f. F" _
.name = "user_led2",; y8 H( T T% j+ [: Q
.default_trigger = "default-on",
! G9 O& D8 G6 `4 G( C) Y( N },
, y/ S) H/ m; P {' k5 u/ H: _) S4 Q( }& x W! Y
.active_low = 0,/ n8 E3 h# @: K3 x
.gpio = DA850_USER_LED3,1 N# {7 d, }, }/ ]) k2 `
.name = "user_led3",
* x9 X! B" r5 l7 m .default_trigger = "default-on",/ }% i- i+ J7 J
},
% r$ W+ R- A+ Z8 [0 z};7 N+ k" z4 A! V7 k2 Q ]; q ?7 p
+ a" Y6 e( L, X9 K7 D4 v
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 ~% }" F3 f6 G6 Q .leds = da850_evm_tl_leds," z! f7 z, ~3 ~: O/ z- H1 p s3 l+ ?
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 m$ s& q2 Q- ~( S/ Y
};
. X( S5 r; S* D" _
4 a5 S' L! T; {( ~$ e" B7 ~ cstatic void led_dev_release(struct device *dev)
% [( p* q% {7 H4 W: e( P B{
. _) ^) Q: N# S9 a};
% `2 }9 j. y' a1 c
" {' {, _3 l G8 l, F( i* dstatic struct platform_device da850_evm_tl_leds_device = {
: g3 p! s4 U1 O0 m( @+ A; o .name = "leds-gpio",
+ y* m5 o* I. h1 i8 U' ~' `2 Z .id = 1,
7 d; z! p6 {) g% [# Q5 O! d3 G .dev = {
+ L1 @: I Q3 b6 a/ Y: o, a .platform_data = &da850_evm_tl_leds_pdata,
6 f {2 f4 b- w/ y E .release = led_dev_release,2 `/ ~0 ], _3 }5 G% K
}
% m& i. b l- p. [7 W) v};
8 K" ?5 y* P; C1 @ ?* @* _9 I+ C+ Q( g, J( Z
static int __init led_platform_init(void): m7 Q# W9 |) g# {& A' o, w5 d0 z+ V
{9 {! O4 X$ t4 L. s) I
int ret;
- \" N9 y; l4 x- m* [#if 0
& W; q* t0 R1 a" D3 [3 @ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 l; O% z! [ V7 t
if (ret)
- {. {- ?. l/ d9 K! ] pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 P8 Q& o- Z) j* y
"%d\n", ret);( i' V: q# P; Z/ {; P
#endif
2 v& o2 D* B3 z6 ~" I2 ] ret = platform_device_register(&da850_evm_tl_leds_device);
2 o' r) w; I9 e. p if (ret)
# x5 H+ z0 A H0 N pr_warning("Could not register som GPIO expander LEDS");
, g. l$ p, S% n) A: R else
7 s/ \3 v! j! V3 h printk(KERN_INFO "LED register sucessful!\n");# W: C4 o# Z" }3 s
0 V0 `( T" k. r5 a# m! _# P
return ret; \( { k! l2 I* E" P
}5 f( N6 D1 T& K9 g! T
8 V/ }6 G* G% }$ sstatic void __exit led_platform_exit(void), \' d2 R; Q1 n! a
{& x9 `, \- N0 F) A4 B* h8 |! V5 b
platform_device_unregister(&da850_evm_tl_leds_device);
X+ D, g* n/ X
1 b1 a8 n8 o* K& I; V, z printk(KERN_INFO "LED unregister!\n");, b5 z2 }8 l( _" s) D
}! n; e" x; D2 S* N6 K4 _7 p
2 A/ n" G% V- G3 t2 e ?2 ?module_init(led_platform_init);
7 L2 ^* i: n5 E. V, n' {4 m! R, y# o# Wmodule_exit(led_platform_exit);- C; @$ b+ I0 R. P; ?# _
3 n( I7 T+ R! g) tMODULE_DESCRIPTION("Led platform driver");
9 v; U% y. ]6 ]/ ^! k: wMODULE_AUTHOR("Tronlong");
9 ]5 c* E" w0 M# n5 @ [+ _- \4 `: ZMODULE_LICENSE("GPL");% b) P2 g0 } ~: |+ G2 A
4 p% G6 ~1 P& D- k! ~
|
|