|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 ^0 k+ \- S/ x' B#include <linux/init.h>9 C6 l$ z, l' o f3 @* g4 q% p
#include <linux/module.h>
5 \7 T% z d& c; ~3 Z2 {#include <linux/kernel.h>- x, ]3 ?. h" i' a
#include <linux/types.h>. w: ` u$ Z4 G, z. {7 Y
#include <linux/gpio.h>5 b7 {8 w4 O1 q3 I+ b; B
#include <linux/leds.h>
6 w1 b: G" g3 t S#include <linux/platform_device.h>( [$ E) F& t: H
! O$ d3 y1 F; T9 |6 ~! \5 h
#include <asm/mach-types.h>3 P3 w. Q* c8 c. a5 p
#include <asm/mach/arch.h>
8 I) s3 E, t5 \7 s/ {9 t2 m#include <mach/da8xx.h>* k( @" u. H: |. H! ~5 P4 Q; p
#include <mach/mux.h>$ }/ |/ M7 b- h* P X0 t
' L' r. {0 r& L& S' s* N y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& R' c7 G' f: J, T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 m- R X- ^; p6 Z4 g' I: j" W#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 F* E) t* V# w, H' G; u9 F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ P$ j+ Q p) G* S" M1 e8 L& ]# H$ f/ x9 H- t2 \+ K
/* assign the tl som board LED-GPIOs*/. D7 b: e R4 V. G
static const short da850_evm_tl_user_led_pins[] = {
c3 Y0 D, m; _9 Z8 |& i /* These pins are definition at <mach/mux.h> file */
?) u+ J' r8 L( O# n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 o. s. q+ B! e -17 o8 H8 E. e% {- ?4 U3 k
};, A+ R s" Y& i& _ S
/ u3 c6 n% {. X# istatic struct gpio_led da850_evm_tl_leds[] = {
$ @1 H7 d4 k( B& @ {
; O* u5 J* U: u5 w4 _, r .active_low = 0,0 N0 K2 A" e8 X, {9 [+ c1 b( V
.gpio = DA850_USER_LED0,( g5 x$ @! `8 f: M$ l
.name = "user_led0",
6 }! S6 T" m% M( u5 e& ~% T .default_trigger = "default-on",
/ j* X9 ^) n( G- T0 ~ }," d2 s' R* a @4 ~$ u$ b+ T( d
{
5 U: \8 x/ l d .active_low = 0,. c+ m D5 o: c* ]4 X
.gpio = DA850_USER_LED1,
- s4 k" b5 _7 j. c9 t1 z2 C( M5 M .name = "user_led1",3 i k9 d. W, J! v2 V+ n c3 A
.default_trigger = "default-on",
# b3 _/ Q' h( f' j4 y( f9 o6 ? },8 O6 i$ R* _: _( u
{
) W0 C- ?8 `4 x2 a .active_low = 0,/ F* d+ e6 K) t
.gpio = DA850_USER_LED2,8 I) N: m c3 s6 y8 Q) S8 M
.name = "user_led2",& ?- J' {, A, E
.default_trigger = "default-on",, r( R! R8 z- \; ]
},
* g# `, G# q& L3 b# X/ f8 j {
, O/ m1 }. A- y/ f; `5 G .active_low = 0,
7 R6 y9 t7 S, z4 t7 W" A .gpio = DA850_USER_LED3,1 H0 `5 j2 `2 R& R' G1 c% ?9 l
.name = "user_led3",0 B% b R) C. O) d% F5 c
.default_trigger = "default-on",' r. S# R1 d8 N
},6 }1 j+ ~5 u p; |8 n4 L
};
2 W5 t. e6 a# |) A k3 z5 F- Z) ^4 W3 X5 O
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& e% u1 j, ]" Z9 H6 P6 ` _0 f .leds = da850_evm_tl_leds,
8 B- x* j0 C: M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 | I: s. X% V
}; \1 a6 m# v% k( \: |
7 |! X2 l! w- r# ?; ostatic void led_dev_release(struct device *dev)4 q3 `, I2 ~- A! y7 Z$ t- f
{
( E. m0 @6 {2 t! w/ }# G};
$ p) h4 D& @- ~- o
N9 [. |/ \' ~static struct platform_device da850_evm_tl_leds_device = {, C! O0 ~8 u N% g* _! u
.name = "leds-gpio",
$ D8 E8 K3 ?1 m8 v/ @ .id = 1,
" V. e. ^* u+ T .dev = {
# v$ l4 N" c+ A .platform_data = &da850_evm_tl_leds_pdata,
# t1 G1 ~ R; v) c .release = led_dev_release,
( [- i3 ?7 z5 T7 H }
% u9 V, H: ?5 U};$ z& \3 c- {; q5 d% G: [+ G
. U( A' n+ W/ H Y
static int __init led_platform_init(void)
9 ]" K: M) y( m3 g ^* T- O. @{
5 y4 _) Y1 C( }, o int ret;
9 _7 l" N- a( N# X$ T+ G#if 0
$ |0 Q4 G, q! Y5 x* k9 ?: r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 k9 _: X# q$ x. W) I# c if (ret)
; \* n- f+ w3 P% b% s8 _) r2 h pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 {; i# A7 \3 F1 O+ g "%d\n", ret);6 }, q" A8 T, r) E$ h0 e* K; _; V
#endif
" b. _6 B k* R( i2 I: P& U ret = platform_device_register(&da850_evm_tl_leds_device);
7 c/ n+ M1 i& L! ]5 a& p if (ret), L* v# q$ A+ h9 `( L
pr_warning("Could not register som GPIO expander LEDS");# Y* y ?6 P, B4 C- F1 s
else) \. }$ c2 @ N. |+ d& n
printk(KERN_INFO "LED register sucessful!\n");
6 g$ U9 j) A. y+ [, N+ A4 a3 V2 Z- P6 @( Z/ m
return ret;
6 `8 g3 r9 [" O! f( Q* v% N}
2 ?' Z2 v0 a/ U; T7 `8 J7 e4 O; u
2 w* A) z/ Q' G& X: `9 |! Wstatic void __exit led_platform_exit(void)
5 G* X4 E1 T- Q- J. o* D' d: m{0 j/ N: @+ h: W( ?' X( x' c$ G% R
platform_device_unregister(&da850_evm_tl_leds_device);
# A; f1 H/ ~2 `6 [% D, B0 m
D* P0 r5 A: @( {7 R1 O printk(KERN_INFO "LED unregister!\n");
, W! y/ C M* D: }}
' Y, j3 ]! Y+ `+ y1 R# P/ [ N# S0 B, l4 [# w5 A
module_init(led_platform_init);* V V5 W7 f/ [# y! l
module_exit(led_platform_exit);
! t) j" i4 b, J" {
' e( ?7 p# W% t1 q' q7 ?7 ]- aMODULE_DESCRIPTION("Led platform driver");
l2 f7 X& i( G7 Q9 m6 T/ FMODULE_AUTHOR("Tronlong");
6 \9 A5 r7 L- Z; U, MMODULE_LICENSE("GPL");
4 F5 c0 G9 h3 y0 ~% n3 z8 f" L. F# M( F: m0 b
|
|