|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 Y7 G" d/ ]) z; M: e: [
#include <linux/init.h>$ v' k. Z7 X1 o q0 d3 U$ D
#include <linux/module.h>
; R" W! |7 F5 r5 n- p#include <linux/kernel.h>0 v) H4 D j& C& p' |4 R
#include <linux/types.h>* g/ O" M2 |. N' S4 C
#include <linux/gpio.h>+ e3 M3 ? K9 y0 e8 K x, T: Z2 @7 U
#include <linux/leds.h>5 N, _7 ~8 f2 C7 q, V2 ~+ y
#include <linux/platform_device.h> O0 |, y9 F8 ^) x& S% N, k7 A. C
) o/ a. F, |, I8 ?#include <asm/mach-types.h># T. e) M. R7 P' _* X9 [
#include <asm/mach/arch.h>
9 {& f& x+ J4 u" |$ K#include <mach/da8xx.h>( L2 G9 H' t% J/ e0 l# j+ I
#include <mach/mux.h>2 B2 f$ y* W, J8 F+ f9 g
3 w5 v9 V" \, q( [) |8 N* F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: ~) o. }) L- ? |' U#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* J2 M& L" P H u9 z; {2 R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) ~6 }0 B) c- i. \, g* @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 T3 E# M9 d; X j2 n) e9 [7 _
' q) d& \& n: T8 ^& p+ X/* assign the tl som board LED-GPIOs*/$ L+ o* E! q3 N# P3 s
static const short da850_evm_tl_user_led_pins[] = {( N4 q8 I% w3 q* A( a7 d- k( q
/* These pins are definition at <mach/mux.h> file */$ T0 }2 L1 _; s( z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, j9 b; I" p5 N6 m
-1
, Q3 F& K, b5 K4 p};
. j. ?9 p* q& X2 G; w! v/ ~3 s" H
static struct gpio_led da850_evm_tl_leds[] = {
7 g3 H7 U8 ?) D8 \% d8 h2 C/ f( e% z {& @7 E$ @ Y% R/ o1 I. m
.active_low = 0,7 C4 B; B a3 |- E3 ^1 V) K
.gpio = DA850_USER_LED0,
" v* Y' V* o( }4 U- e; W6 j .name = "user_led0",
* p: C* \7 c; k$ z; l, g; t .default_trigger = "default-on",
, a0 c4 b. R" c$ \" t" z; \- _7 g },
- O: C8 _' B! X9 H9 E2 b {( l5 F0 N5 }7 _5 j2 y9 J
.active_low = 0,
+ X; a# \; H1 c+ x$ j% Z .gpio = DA850_USER_LED1,) R# }5 Y( P7 e. V2 U
.name = "user_led1",+ Z( r! F2 i3 [ D! h* Q6 ]
.default_trigger = "default-on",4 U9 S+ ?6 F+ ?; l. G0 d8 D
},4 s2 ^5 h u6 c: u
{: N8 `( e9 \8 e' ~; \) e$ F5 l
.active_low = 0,
% s" P) q8 ]2 T3 L .gpio = DA850_USER_LED2,$ Y7 M4 u0 Q0 r, F+ [
.name = "user_led2"," Z9 g3 y4 \, V/ `8 k0 ~% `
.default_trigger = "default-on",% l0 \5 }& z2 X& Q1 C P
},
' C4 R- D0 Q. G {. c2 i) J" X6 J; n& n+ B4 L/ s" F
.active_low = 0,! `! _: G: o. f! X: t( ?4 ]
.gpio = DA850_USER_LED3,7 w; `0 V5 H7 Y5 O/ R
.name = "user_led3",
: V$ }, M/ j* e .default_trigger = "default-on",4 S0 Z6 f! v2 ]- ]% s) Y1 y
},0 i2 ]' y& _) J
};
/ o5 Y, P4 G7 x3 l; G9 r& O; ^$ {2 a7 P: x w# Y' i- N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* c+ o/ m* U; e( C) Q# j1 z+ H
.leds = da850_evm_tl_leds,
2 V0 z, s$ V1 t/ @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! G9 O+ b% W) p# I0 K
};9 g) a1 F" K3 `6 k$ Y6 S% V
$ f9 t5 U. J7 ]: z* [8 n+ N
static void led_dev_release(struct device *dev)! m$ i) P& Y: S H: t5 O
{
4 o/ y# Q) l' J( j, @: C* t};
9 @1 ~2 N& Y, b6 _5 I( A
7 o/ }! ?7 F1 X; J/ lstatic struct platform_device da850_evm_tl_leds_device = {
6 {# `3 m! g& u% N( u& \( z .name = "leds-gpio",
$ F d' i3 v" ^4 G- A/ K .id = 1,. ~3 `8 i# N& E, L3 P5 U# S
.dev = {/ U* C$ d% ^9 Z0 v* }0 f, x5 P
.platform_data = &da850_evm_tl_leds_pdata,5 y0 S+ p4 Q! F
.release = led_dev_release,5 Z4 c5 ?; E3 G8 R
}9 z; Q3 @, ^" K
};& y: E" ?, J. E0 k8 ^$ k% A
H! W: H# ?9 I8 R. V/ m
static int __init led_platform_init(void)- m l5 d# { F9 X
{/ Q5 g" U% S9 I5 m2 F+ E. k
int ret;# l4 O. G" o( O" O# b% l
#if 0
: _8 ^3 j- z% {. j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 B- q: t" Y8 f% l I- Q" u if (ret)+ k' V1 ]6 x7 S0 I# o4 O: r
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") F6 T4 \ j l
"%d\n", ret);8 Q4 u2 @9 k8 t7 N% r& U
#endif1 T$ l& t* U, q
ret = platform_device_register(&da850_evm_tl_leds_device);
" y) D) g) m+ A E: ?7 ~ if (ret)
7 _6 S4 R: [% x' S5 c) ?9 `: W) T pr_warning("Could not register som GPIO expander LEDS");1 u9 p# `+ _ u% v# U: [
else
! E" h6 ]" ^ x/ _! T# ~1 m; O printk(KERN_INFO "LED register sucessful!\n");
( @" `7 ~: [! c
8 G0 _# u; N: h) L/ @) N% A return ret;
$ c, F; V! V# ?* V}
) A- x0 V6 y& L7 z- ~$ e4 h% H
% ^0 u9 L: q) Jstatic void __exit led_platform_exit(void)3 k/ p$ K- D5 B3 l6 V7 w4 f
{# b2 x8 L+ C, @ U0 k
platform_device_unregister(&da850_evm_tl_leds_device);0 ~, T# X. ]3 D; l
. O& u/ q- _4 b7 {& @8 m) n3 C7 z printk(KERN_INFO "LED unregister!\n");
0 l5 p1 I8 t, y8 D/ F9 ~+ |" ]( M}
' D* i+ v% d M f; j5 d8 n& q+ v7 |% |1 V( T, C
module_init(led_platform_init);
( a9 z/ T5 e8 F1 gmodule_exit(led_platform_exit);4 P- B! Z4 b6 I g3 D% L8 q1 g
3 P" e1 U0 I% T$ X3 H" l0 g
MODULE_DESCRIPTION("Led platform driver");* `5 z! b3 h& v
MODULE_AUTHOR("Tronlong");/ Y4 m, u, K# z7 m6 Y$ `3 a6 ^
MODULE_LICENSE("GPL");/ F& Y; l. M0 ~ q
% Z. c1 \# L& d5 Q% E5 X
|
|