|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 n/ {8 B4 D) X
#include <linux/init.h>
' u7 f+ y( d4 |3 c* D#include <linux/module.h>
1 N0 f! C. e; }/ U0 C6 X' U3 [4 `#include <linux/kernel.h>9 K7 F' Y @: O( J( i# D0 a
#include <linux/types.h>
: _5 j: e! c5 b' a( s: d% J#include <linux/gpio.h>7 o4 A u) M( j% }) Q: T8 T) L R9 s
#include <linux/leds.h>. N; e3 K# J. F' K8 j+ n
#include <linux/platform_device.h>
. N& F; \* l6 f$ f* k4 ?2 v( U' P, J1 B* U ^/ w
#include <asm/mach-types.h>+ S/ s# @. [# U& W/ Q/ S. U! U
#include <asm/mach/arch.h>
) ]% T3 n$ ^" L- W: X& i1 g#include <mach/da8xx.h>$ U, [" p# m1 w& c, K
#include <mach/mux.h>
0 I, {3 D! ]. {$ X! I' m! A4 k2 K7 }1 V
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 v& \; H, j8 q3 b! d- c1 d#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( b1 { }: f7 p, d. g, D
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- U5 _. [) U" {+ y5 `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; z C, ~& }9 |. N( n2 Q" E, z
) K: y: P" X& o6 Z q" B/* assign the tl som board LED-GPIOs*/
4 X) I( z2 C& D% [( v, Ustatic const short da850_evm_tl_user_led_pins[] = {! }7 g5 | i5 W+ d
/* These pins are definition at <mach/mux.h> file */( m) n0 @ y' V: A7 j1 R9 X( [
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; q! I( I. g, U, C
-1/ c3 ]% V$ |: u% j; Q% D7 ^
};
% [ g8 P2 W- K8 k, D- G
) K: A1 B" [" P- y1 v' rstatic struct gpio_led da850_evm_tl_leds[] = {
* u: ^ l9 o+ f( S- b# U {; c' s0 N; [+ P
.active_low = 0,; ~7 ^0 X( e* E0 ~) S
.gpio = DA850_USER_LED0,
, _3 ?$ H: g/ O4 @2 d% W: t .name = "user_led0",1 A0 e* b$ y9 E6 i( Y: p9 D5 D, K
.default_trigger = "default-on",2 e# |+ N$ z# `' H
},, k7 }* M( {8 A- ?% h* V
{- F3 z6 d% p% _; I( ?
.active_low = 0,: E0 p' T, w9 K+ S& V/ ]* t9 M4 R
.gpio = DA850_USER_LED1,
# [* W1 k, x6 l" M .name = "user_led1",
; I3 [9 I3 i! e; z' M: M: y .default_trigger = "default-on",
* @4 P9 N5 I8 ~% c0 R: |9 F },4 C6 c- T7 O |8 b: g
{9 A. n% {# m) {( d2 n
.active_low = 0,# T2 X6 b: h% S2 K
.gpio = DA850_USER_LED2,/ J0 S* x8 i- G* t, j
.name = "user_led2",
! q0 [9 {# b4 S .default_trigger = "default-on",
, E% q6 S, b+ R- `9 G },
# Q" Q9 h$ ^& ^; r) k6 L* S {) q2 b. Y0 V3 w2 C
.active_low = 0,
3 P# w# R" H1 _4 w% d6 r+ K .gpio = DA850_USER_LED3,
" m8 {! Z* p+ ~4 w) b% F8 |, K .name = "user_led3",: K# D5 i4 @/ N$ s/ `3 T8 U: I h
.default_trigger = "default-on"," E2 U" [; k' r) Q
},
1 R4 A. y' M) x# e* I2 ^$ b+ x) s) T};
8 \/ y4 l# j# k6 j7 M+ H" m
Z% C" c& R( B* Sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- d$ e8 Z/ ~5 V/ u" z8 L# V" ^0 K .leds = da850_evm_tl_leds,
" r& n3 f) m4 y' Z* x5 Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 _: c# _4 o" g/ R' J. j6 k
};
# c/ n+ m4 x H4 r) |* o+ N( t+ }! ]1 P
static void led_dev_release(struct device *dev)
( I& l* q# u: S0 m{6 [% V( T" }% l& t) T! D
};
/ ?* p' s7 t' S7 r; r, ?8 p8 P1 s) W5 v& p6 F, d( `# X
static struct platform_device da850_evm_tl_leds_device = {5 A8 C4 U" j P7 J5 v+ z
.name = "leds-gpio",
5 g# A! @; T& q .id = 1,5 _4 V( Z1 a* q
.dev = {: A; p" h$ S4 ^& N, R# o
.platform_data = &da850_evm_tl_leds_pdata,) h% J$ b5 p- s8 e. k
.release = led_dev_release,* j6 E% A+ L& y) W
}8 e1 }) q5 Y3 a0 c0 O) O
};6 G4 N2 U* Q- m/ o: W
: w) R5 z: A$ m, u7 B* ]2 H% |
static int __init led_platform_init(void)
) F1 A: l& @* Q{
% A- k8 Y; }0 L" e" Q% C int ret;
" t4 v0 D9 e1 U6 d#if 0
6 u2 a' k$ C$ V1 h: y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' p+ e H- M/ o. P7 ]4 v7 e
if (ret)/ n5 q. X# V. O" e1 N. `$ n( J
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% l7 Y& J2 H1 S, G* {8 z "%d\n", ret);
. h" u7 y8 P0 l#endif
$ _( H$ t3 _: |, l ret = platform_device_register(&da850_evm_tl_leds_device);5 [; i$ x. [; l1 R$ f: b" ~6 d' ]' P- M
if (ret)& E/ `( G$ [6 r/ X8 M( U; }
pr_warning("Could not register som GPIO expander LEDS");. x+ v9 m6 U8 I- P& o' U" n s: r
else- }2 b1 ~( M( I+ `, s& }0 S+ H3 }
printk(KERN_INFO "LED register sucessful!\n");5 J, T' V* Y- M% U* }: |
6 G I; f/ o9 i. I7 _5 L return ret;
3 T+ o* u" I# n: s) k! n' r. _}3 o v; K+ E2 ?& W6 S
+ W L* C, @7 E5 s% ?
static void __exit led_platform_exit(void)
3 T+ |3 i% e" l{
- x- m$ A: T8 c3 C2 G0 U2 T& c platform_device_unregister(&da850_evm_tl_leds_device);
0 P# K( k8 I- ?; q/ ~% l2 Z) i. l* ` G6 k; y% B' J4 J( O7 ?
printk(KERN_INFO "LED unregister!\n");
5 I3 V; s9 v+ o. t* C- `+ k} f. s6 q( v' J, d6 f. m; K
# S7 _& F& l- Z% F/ i5 Wmodule_init(led_platform_init);0 Y \' P9 d9 e0 X( h1 G
module_exit(led_platform_exit);0 x& t+ d/ v0 O( N3 Y. P/ T
8 h+ S: K' l) n1 u8 Z1 J& [
MODULE_DESCRIPTION("Led platform driver");
6 T5 [7 h& c' n. _* V3 k3 S2 rMODULE_AUTHOR("Tronlong");
3 v8 R9 C( G# l. J: M# ^% bMODULE_LICENSE("GPL");% ^' E% w O; x" i8 m
8 |" J/ k" b* m+ l2 {8 Z
|
|