|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 n) K1 ?2 i9 W. ^; w#include <linux/init.h>+ R" D% V3 y, ]6 P
#include <linux/module.h>% g$ B& G' o% `) @7 C8 p: V4 e
#include <linux/kernel.h>
6 d( _4 i6 v) s' \/ T% u#include <linux/types.h>) D- g; N! ^( u `' d
#include <linux/gpio.h>3 C1 C( v+ m) g+ x- R
#include <linux/leds.h>. V: l* Q2 M. q' A' X& }3 n8 D' M
#include <linux/platform_device.h>
1 H$ M' i4 Z; U+ Q) ?% d+ P. t; B; ^ @$ Q& T" R
#include <asm/mach-types.h>
! y6 K$ S0 V9 p. z! R8 H#include <asm/mach/arch.h>. y% R! A0 r6 _
#include <mach/da8xx.h>1 T# t2 c4 v" K/ f6 x7 C0 S
#include <mach/mux.h>) z+ J; c9 E) U+ a6 ?6 @
0 p Z# m2 I! b5 x/ C0 ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: I$ q6 @' q# i$ `2 s! T6 _) m- G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) M# J, ~1 r! t7 l, y0 I3 Z/ m9 v! {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! i9 W+ l: {. {+ h# p8 |* Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# z$ d) h6 J) R8 \
2 g& Z, p8 z* } V2 [) k/* assign the tl som board LED-GPIOs*/
3 B# ^$ @: n7 e& F3 }static const short da850_evm_tl_user_led_pins[] = {7 ^- J6 h" g% }: K) i/ U- t1 k
/* These pins are definition at <mach/mux.h> file */- ~; v, u, B d+ s! l% k$ _
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' \' v) M7 v7 C$ J& K -1
4 _' M7 v$ J" J% d9 {};
6 X h0 J1 q# e6 q5 @ \* G7 u3 b1 ]+ ^& m
static struct gpio_led da850_evm_tl_leds[] = {' K8 c* J4 [2 P9 o/ _' Z
{
( V8 Z* o, X3 Y1 g .active_low = 0,
0 I! B# h2 i3 L9 G4 P8 n .gpio = DA850_USER_LED0,
t( h' L# _1 ?: Y4 Z" [5 ` .name = "user_led0",
/ p% D/ `" {; c* T' \2 V .default_trigger = "default-on",
9 g. ~+ T: [+ a2 q& z1 \4 A, ]4 q },8 b" D1 J+ X( }' z' {
{& F' G. y! J& q2 @' Y
.active_low = 0,
+ w& r: t& a9 p7 {4 M: O$ e .gpio = DA850_USER_LED1,/ y X# F P* x' E
.name = "user_led1",4 v* x3 K, N, F, G4 \
.default_trigger = "default-on",
D- `- w; C% J2 ` },2 b3 e5 z& S- {4 g6 Q+ L+ `& X9 X
{
. u3 Y* k/ f; B7 v7 a q .active_low = 0,
$ N, @. x& o: g% X. n .gpio = DA850_USER_LED2,
3 [# p* m @' \4 D( s$ ?( E .name = "user_led2",
% D0 F' Q+ i; D1 k# E .default_trigger = "default-on",
% u* }4 P' D6 R },( p. X: M; v% l$ Z
{
5 g7 ]* ^* k) d9 V; L" `# T7 X! h .active_low = 0,; G3 Z' D7 b5 {1 \ o) X0 y
.gpio = DA850_USER_LED3,
: M$ Y8 D! t0 y$ H$ r2 z .name = "user_led3",
* i# t% N# l( N+ u& ~# K .default_trigger = "default-on",
; o9 o0 D6 {' j4 S0 Z" Z( D8 K },6 O3 H( b. Y) y a6 D! h" [$ n% E
};! [/ p: d/ R; P9 u# J1 u
& C; ^+ Y: k( X/ r( Q* vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- H$ i; V1 i5 S; v# F; O: B .leds = da850_evm_tl_leds,
+ ~+ y+ r- Y' G" b4 u. ?& \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' J$ d4 Q5 h3 w" w: @
};
0 W) B* m- i- r1 B$ C1 A! s8 }/ m( L$ r3 T4 \/ h) d& X7 B7 ~
static void led_dev_release(struct device *dev)
0 W4 }* N$ F3 R9 O1 _8 U" k* o{
" m o" N5 T+ ?7 h4 ~};+ }- e8 d) |7 \. d
7 [1 ]2 L% ^+ H8 X F1 B
static struct platform_device da850_evm_tl_leds_device = {
+ b6 _' X4 X9 N( ^: R- K, f* Y .name = "leds-gpio",! X4 Q B0 ]. F3 H; E
.id = 1,
0 K0 ]" D3 o: a' b- f .dev = {
/ S1 ^; d& d: K: i% G/ z& _ .platform_data = &da850_evm_tl_leds_pdata,% l V+ R: v, O& P) W; m j
.release = led_dev_release,
0 {0 b4 f( F$ ]$ k6 ^* w }/ j p8 f9 U# |! d& c$ u
};5 L c1 ^$ v) g& ^/ G3 X
, w: ?3 Z3 z9 X* ?0 ~
static int __init led_platform_init(void)
7 Z0 C/ j4 y1 {7 q{
% B) I3 C2 {/ M" K$ u4 y u/ E. M int ret;
2 U% _3 ~# u! G$ e5 u( b& O#if 0 H: w2 A+ H& V" v# X; Q) @7 z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 L! j f1 H5 ?3 h if (ret)0 V: @/ \5 D( m
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ {: `) }) f/ W$ ]$ h& E9 L
"%d\n", ret);' j# }) r: I6 a# {4 M5 V
#endif6 L9 r0 D; M8 U5 F! L' N$ Z
ret = platform_device_register(&da850_evm_tl_leds_device);8 R d- n$ E- z0 ]
if (ret)
9 |6 X- @8 y% G/ A# v pr_warning("Could not register som GPIO expander LEDS");
: H4 `4 G3 J* B else
! c0 Y4 n) ], }, g, ^ printk(KERN_INFO "LED register sucessful!\n");
, I' }. [! T% G' k' X- e
) `" e7 p3 r+ @. G% Z0 \ return ret;
. r: Z% P# a9 j% y}
, k' C5 S% y8 F# r% |
2 t# J' i+ {6 q, lstatic void __exit led_platform_exit(void)( C( |4 v% e3 w$ @9 [
{9 C, C; ]) t) B1 \
platform_device_unregister(&da850_evm_tl_leds_device);! ]; g# h$ p/ }/ f; _' }
+ w% H5 s+ D0 D printk(KERN_INFO "LED unregister!\n");$ {8 n) \3 [4 y/ M! r2 u$ g
}
7 v7 m9 \: w, D# |8 h6 d; M* c
& p1 F) b g) E* U) L4 Lmodule_init(led_platform_init);+ ~' u8 f9 y$ \7 I# B/ p
module_exit(led_platform_exit);
$ T0 d. \2 I4 |9 x3 [, p
+ N5 b( N3 U6 vMODULE_DESCRIPTION("Led platform driver");0 ~, M5 \. g' P7 m0 O' W
MODULE_AUTHOR("Tronlong");: K. m* G& S# ?- q; h0 V4 L
MODULE_LICENSE("GPL");1 t& l, P7 [$ k) v
. x& o9 L! L0 _& ^8 B
|
|