|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ y, t& {* a" _) Q& k: H#include <linux/init.h>
) q7 f W" n* o+ L7 d: {5 ?* I1 K: O#include <linux/module.h>
5 o2 P- x6 O9 L, C3 N! f#include <linux/kernel.h>: `( ]& M/ Q% j4 O
#include <linux/types.h>
7 V( K: k7 I2 |#include <linux/gpio.h>% `$ t. Y: B( {' o$ ]% k3 \% B( t
#include <linux/leds.h>4 J9 s/ M% D% ~ a$ o! b1 p, k$ r& O- v
#include <linux/platform_device.h>9 U5 X r) k7 [: w( ~
9 g5 U5 f/ x- D+ [8 k2 _/ [#include <asm/mach-types.h>6 f' T+ ^( r7 _, Z. P7 I
#include <asm/mach/arch.h>) p% i9 O* N! l5 |5 S! r$ |
#include <mach/da8xx.h>
2 d% m# z1 x- i/ p* \. d* Q$ Q9 R#include <mach/mux.h>: l" ^- L' G: R% R1 c- @
6 W% w' B4 A6 [& d# T1 U
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& m' F+ O% G6 d% u1 Q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
W! P% B! L, R# t, r#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ b2 z3 m1 S) Q+ A) o/ T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); j* H* A b$ x) S9 C9 x
0 H+ s" t- e+ G. u* \0 t' q/* assign the tl som board LED-GPIOs*/; O+ v' E1 Z: E9 y
static const short da850_evm_tl_user_led_pins[] = { @( U. V5 j2 p; t5 \" N" J
/* These pins are definition at <mach/mux.h> file */
7 x: ~0 {% x# m1 h f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% m4 C- R6 x, U9 q4 n# j -1- j/ M4 c% U* ~6 X+ c' b% J; Y$ w
};
" b6 q7 a5 F" l; J
W% K+ h; W, u' ystatic struct gpio_led da850_evm_tl_leds[] = {
0 }; W |: x. d, Z/ n6 H+ d9 k. a2 B( b {
- X$ }5 _* k& X9 Y: t/ m ~- S .active_low = 0,
6 y3 U: }/ ]+ J% f- l2 u2 ` .gpio = DA850_USER_LED0,2 j) ?& b D- Y7 R4 E
.name = "user_led0",
! w2 s- Y6 e$ q# v% i& J .default_trigger = "default-on",3 Y4 D ?0 i6 F" q; ~+ E9 @% F
},
/ ~; D% V& H; U {5 G) t+ g$ ^. P
.active_low = 0,
% X2 i' m' K8 n$ e% N .gpio = DA850_USER_LED1,
! ^0 J9 ~3 @; r* H2 V .name = "user_led1",
, e( F( t; M4 B5 A/ w2 v1 k$ q .default_trigger = "default-on",5 K9 `0 p9 q' A1 C9 q: E
},/ m/ N2 \$ t9 i, L, d5 O
{! l4 Y% S7 L! @ R- [4 Q0 X* G7 h
.active_low = 0,3 U3 ^4 B" s- C2 R3 v
.gpio = DA850_USER_LED2,
- T# w' A D O, y8 N3 Z .name = "user_led2",
5 Q/ `# P$ B3 e5 z: r! y* M .default_trigger = "default-on",
8 y0 E0 U- _) i* K! p* m* V# b },
! k. l( W; \: B5 ]2 U" M8 Y {
. W( p/ b/ l8 Z1 U .active_low = 0,
; G/ E( U A8 ^0 @- Z# v: V% W) ? .gpio = DA850_USER_LED3,/ R9 R+ e8 V) v5 c. ]
.name = "user_led3",
. }2 O6 D8 @% ~8 i .default_trigger = "default-on",
% t3 x8 K9 X! Y },9 Y) \" m# t9 f$ l& d
};
/ w. _% E# Z% @. b, z' F4 K2 B l5 X# O) H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 ~+ r2 o# {1 W4 {* {- H1 r5 S .leds = da850_evm_tl_leds,
% S0 C- o: n4 n .num_leds = ARRAY_SIZE(da850_evm_tl_leds), ~3 T# K6 w3 @; c! Q; O7 O
};
4 W& H: P/ \& e1 u9 D& [' y) L& E( t' \
static void led_dev_release(struct device *dev); F1 g5 t- x* Q8 t) v
{: v8 K- @- R& x
};
0 L1 _0 V- K, T* ^7 \' Y9 `; z9 |0 ^- {8 e
static struct platform_device da850_evm_tl_leds_device = {
+ _1 l$ V- J! V5 h( Y .name = "leds-gpio",- c/ x2 j9 p1 [
.id = 1,$ T/ I' Z& ?& Y1 D8 r1 k9 A
.dev = {
; P- p% Y, Z, L4 W .platform_data = &da850_evm_tl_leds_pdata,( H; e' p0 z) r( E- n- c! K+ M( Q* ]
.release = led_dev_release,# q/ O( K0 x+ `0 ^' o
}
8 f+ o5 a4 j7 t};8 X7 N. E p9 L3 e c
$ ?: L9 Z8 h5 Z# Fstatic int __init led_platform_init(void)
6 ^9 P: K/ v- z& r" d{
3 g" F9 E; n! Q, }3 F int ret;& [# W2 c; k0 b- Q
#if 0/ D. R) d9 {, [. e% ?6 X: |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 R, \7 F( K- X: C7 E2 k, D if (ret) G9 l( f/ `- _2 A- z+ |# T: B& o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% _: G8 w8 A4 f" ~ "%d\n", ret);
/ r$ Y6 J1 ? i- e#endif
6 s q! ?4 n' G9 G7 u) I- r ret = platform_device_register(&da850_evm_tl_leds_device);# \/ N- ~* D, s2 p5 G1 y9 V
if (ret)
1 l5 m- d' X5 n- K3 O: i' w- p pr_warning("Could not register som GPIO expander LEDS");
8 ~- k8 b9 S+ k+ F( u/ ^# ^0 S else! u4 B! u, L6 y4 w; w- V; v
printk(KERN_INFO "LED register sucessful!\n");3 g! y( S9 v7 E9 A
! ]( \3 ?7 m- X1 N/ A& ^
return ret;- i4 H( K$ X3 z) l+ `- X
}+ X9 o# I% O/ [ Z# p, N( f
7 d) b( o, H5 i% V
static void __exit led_platform_exit(void)& v0 s9 [$ u+ o7 t! Q
{* o( y8 [, y7 U. R& h5 v N+ h5 r
platform_device_unregister(&da850_evm_tl_leds_device);
* l2 E1 H6 |0 `8 k) [- y% r9 x4 p' n) _% }
printk(KERN_INFO "LED unregister!\n");% z4 |4 _+ C' R
}
`5 o2 T; U: E; ]1 c' s, r3 v: X- |+ o* g& p. O& q
module_init(led_platform_init);6 X/ h5 d' i' D& r- `# D/ Z
module_exit(led_platform_exit);
% m4 P4 d4 }( C8 O- G8 {; n
9 G/ m7 S. R- B0 rMODULE_DESCRIPTION("Led platform driver");# B) ^# N& @$ ]: g! X
MODULE_AUTHOR("Tronlong");7 \# E" Q* k6 d6 W, v
MODULE_LICENSE("GPL");4 u: e3 [) S" m
) z9 o+ M w1 i7 e' |
|
|