|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 u% Y1 @% r0 W8 k( W; K#include <linux/init.h>
+ x. \: j; i$ M5 X3 n#include <linux/module.h># a8 n% @- B' E+ u, F, s
#include <linux/kernel.h>
8 j9 D. s! p& _( x+ a! x5 K$ ?#include <linux/types.h>
6 V6 B0 W' a. m/ I" y#include <linux/gpio.h>
, [# A2 m6 B$ P. Z% S#include <linux/leds.h>
* {; }1 C( I+ u& O0 @; K#include <linux/platform_device.h>4 \6 z5 r! x, V6 p4 _
. c& y- S, i" c- }2 G
#include <asm/mach-types.h>4 N _2 G; b+ A1 o3 c6 P( _# V7 m
#include <asm/mach/arch.h>/ @2 `+ E4 s% C+ r
#include <mach/da8xx.h>
) H/ }8 r3 T7 |' x& D' p& ]7 ]#include <mach/mux.h>
+ ?5 a. m2 G3 S, k+ V
7 V, T9 t5 `8 H4 P2 Z, k; g, K; l#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); @3 i: n5 \+ B6 L/ z5 K
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* \' T& ]6 Q* b" t# K# i0 M `
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ E1 |$ l! q! B& k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). o- ^4 ]7 y& A* S' O( J' w
3 s+ {# ?" L( I3 p, \4 C. B' M7 d
/* assign the tl som board LED-GPIOs*/- y' S L2 i G- e0 W6 {9 i
static const short da850_evm_tl_user_led_pins[] = {
7 g7 M9 r8 |1 H# H /* These pins are definition at <mach/mux.h> file */. D0 f$ Y* P7 \! i* g9 d& T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- @% Q8 r% Z2 e+ m/ c8 {, v* b
-11 ?$ F. k% E8 Q
};
) Q1 i4 _: U2 g+ L2 V3 Q% a# |- A
( l" N7 e. m6 E! l" J: Wstatic struct gpio_led da850_evm_tl_leds[] = {
' \6 [/ q4 V5 L5 x* J {
4 y% R E# n. M' m/ I( }* x .active_low = 0,
! B7 Q" E4 j# b* o) g( \. H2 ~, [ .gpio = DA850_USER_LED0," r# ~9 c$ i5 v: @) A; y
.name = "user_led0",% H: Z0 n$ i% ?- S) A
.default_trigger = "default-on",
- @/ I! ?6 M) ^; T9 H& T! Z- W7 T },& Y% y. L0 o( t' y S4 g
{
T7 W& M$ M6 q6 p5 z. g .active_low = 0,
' n: ?1 S* h8 c* K# n: z .gpio = DA850_USER_LED1,' d* ^1 b- ~' c. J* ~* L# R. V
.name = "user_led1",7 z8 K) _) O8 ]) `% E
.default_trigger = "default-on",
# j3 o# G7 B; c5 Y0 m! a$ T1 K },! J n$ h0 Z o0 X
{
, W; d7 s- \7 j6 _ .active_low = 0,& w1 N# n+ v& @$ e+ B& X% y
.gpio = DA850_USER_LED2,
1 i! }* R) Z2 S3 J* ^ .name = "user_led2",
: d* `5 C+ o: S$ d' \9 o" u .default_trigger = "default-on",
' E! D" [+ V4 u! x: O" J# [ },
- r6 j# H: Y5 O1 Q b# K {
4 V8 `$ M4 b9 `2 ` .active_low = 0,
1 Z8 S2 x- R8 x3 A. { .gpio = DA850_USER_LED3,9 s8 z, S$ X }3 F
.name = "user_led3",
- a. [8 f6 u U; r: u. R .default_trigger = "default-on", E _4 F7 R# l5 n+ Y: f$ H; E3 @
},
* o4 x: s& U9 }};
( n) c+ N& H6 O' c/ Y
3 L9 G0 Q! N1 ]static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { m& u! k. J7 [6 d, w. F
.leds = da850_evm_tl_leds,
1 z& P' X& D' m7 A& b+ [6 v- o" E .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% O6 E) X' `8 D! [9 R- U
};! n- j; H7 ?5 U# d( U2 T
. w, R) t* [$ e( {9 l2 ]
static void led_dev_release(struct device *dev)
, `6 j4 X' E+ y8 S0 A7 O' Y8 E{6 ?1 }& k- m0 g, v' w8 D5 r* j
};
/ a( p1 _/ w/ @0 p U* ^& r0 E8 @$ x+ v, x
static struct platform_device da850_evm_tl_leds_device = { D9 ]8 t5 i9 P& c
.name = "leds-gpio",
$ Z Y# I/ v5 ]* T .id = 1,
& @7 Z& \! v; T6 Z2 b .dev = {9 c6 |/ [7 y: U9 t, L% R8 f
.platform_data = &da850_evm_tl_leds_pdata,$ s+ M* h4 e( |0 U) j
.release = led_dev_release,
. E. S7 \& E C# F: v }4 ^- l+ t1 O: e* s4 Z1 S
};+ L6 D" G: R V: ]. P) u, B7 F
) M8 F [2 S* V& W
static int __init led_platform_init(void)
& l. t: M4 v3 d# u{
a/ D5 @% n& M int ret;, W3 h3 M! [2 P7 m+ J
#if 0
; B7 J( v5 V% J7 }& }. I8 H d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! _8 L. @, a& Z$ a% u) i# D
if (ret)
* i: \# D: i; d6 Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, H- U. C' f. f# g2 t; v "%d\n", ret);2 B) F: Y* w& j7 [+ I7 `3 p; O
#endif
2 W' t! R8 T v- |6 l2 ^; S( n2 x ret = platform_device_register(&da850_evm_tl_leds_device);$ d# y4 C: [8 X6 `
if (ret) G! {2 f& Q$ s& v9 `
pr_warning("Could not register som GPIO expander LEDS");
* f' W5 W, M* _6 l* m) t else4 k2 y( g Q p
printk(KERN_INFO "LED register sucessful!\n");
1 r9 p5 K7 {% B4 D5 c8 F* R. }
6 ~1 y; ^6 `+ _5 u return ret;; [" q" Y) W( y( `: E
}& a; t0 R; p8 F8 F0 V2 J6 [
0 b4 x: W1 Z+ fstatic void __exit led_platform_exit(void)% e6 ~' R4 x+ P: v. s/ _" _
{
; n: T+ B, O) z platform_device_unregister(&da850_evm_tl_leds_device); j1 Z t1 E3 V3 r( [6 c
+ O# y( V: X5 ?. ]8 z8 @4 H6 I6 w
printk(KERN_INFO "LED unregister!\n");
/ g' q% B( G L* }8 i1 m}
# ^ T; V3 V- w: F& ]: d9 U. J. ]& p. ]2 Z& f: @ ?) Z! ^
module_init(led_platform_init);
0 s! v! f, Q1 a5 t- omodule_exit(led_platform_exit);' p0 ]' G$ o- x! }, l8 o" I1 [
# ~; [( R; c0 O* h
MODULE_DESCRIPTION("Led platform driver");
E2 @( S5 J8 K; j- s) m7 tMODULE_AUTHOR("Tronlong");
; C. f2 D3 _2 t9 D8 r7 ?MODULE_LICENSE("GPL");
0 E" z) x; O5 T! v) Z" M" k
% E2 T6 J) o6 L( p) p: c, o) Q: }$ z |
|