|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. F/ ~2 N4 ^7 w/ }#include <linux/init.h>
' T" [' H* [2 s, ]! J! o& X1 v# u E#include <linux/module.h>+ a' ~% a% {3 d
#include <linux/kernel.h>
$ K5 g: I. z9 r3 b8 r' Q& p#include <linux/types.h>0 x( ^. K; `3 f5 h
#include <linux/gpio.h>' E. V7 I6 Z0 d; D
#include <linux/leds.h>
! n' T: a$ ?. E( U* W, q. v#include <linux/platform_device.h>
7 e3 ~4 J- N- }7 X! r) G
& X: U. l! Y+ ^( `5 J# S( b#include <asm/mach-types.h>
% p- C1 ^9 M" K$ k1 {#include <asm/mach/arch.h>
& p4 {; ~8 g4 T& T1 s7 G8 O#include <mach/da8xx.h>
# P$ W E7 l5 A#include <mach/mux.h>
2 H1 v8 f% e" G2 A/ d1 |& h( \* j8 F# H$ N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' O- l0 e; v7 ? K7 V#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# R7 i" p1 r# p9 p. P$ o#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# C5 i: X- ]; ?; C% J6 B* U
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); ~( f# m6 }; I$ |5 q6 ^
8 Q- B1 }+ F, B4 W* q7 s( _
/* assign the tl som board LED-GPIOs*/
8 v8 w2 h. Y$ G1 V [static const short da850_evm_tl_user_led_pins[] = {
J6 B! e( O0 Z S2 S7 a( j9 t: C /* These pins are definition at <mach/mux.h> file */
- z9 m- {( Y/ C8 F' o6 E/ F! ]' C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 f7 ?2 h8 c! ?( }2 Q/ W -1
2 c- [" g9 D g( o3 t7 _2 b};
( m. |4 ^) f0 {; m8 `& d/ _1 v$ @' J( N. M8 M8 s- y" w
static struct gpio_led da850_evm_tl_leds[] = {
. S# L+ [7 ?" I {+ T, D. a5 {( N* `
.active_low = 0,% f& U" p9 U r: q( e, |. l5 b
.gpio = DA850_USER_LED0,
. \$ q1 `$ g' ~7 A: V2 K$ T .name = "user_led0",7 X, i& S; [8 N* j6 @. ~ X9 Q
.default_trigger = "default-on",! L2 D- E2 C5 d0 o
},- ]1 H8 u$ K# `. Q9 i( h c
{- J( N$ m1 m Y0 [5 a1 t
.active_low = 0,
! J) c' C5 G1 u6 O; `* A .gpio = DA850_USER_LED1,
* w5 N, e/ J- v W .name = "user_led1",/ E) g: X' ]! H0 {5 c
.default_trigger = "default-on",
' n \. P: `" G6 G },, A2 X, @3 |9 K
{
3 p+ Q/ q6 @. Z# v7 {$ B .active_low = 0,
5 I- `; p2 c( P Y6 k! p .gpio = DA850_USER_LED2,
" ?# f% f/ L; L: B* C9 c! B .name = "user_led2",
$ j2 J' o# J+ Q) o. m) ]7 [ .default_trigger = "default-on",
9 y6 x- k# [6 x% ] },. e; V; h- U1 a; R) F) x
{4 e) q) B; t6 H- t! \6 @3 F
.active_low = 0,
+ o' E2 H" d+ w# J* T .gpio = DA850_USER_LED3,6 d P7 T7 |( M0 C. W l
.name = "user_led3",1 U; D& b/ a; r" B6 N1 m
.default_trigger = "default-on",
# P$ u- x; j+ O7 z- N },% t# U9 r; |3 [0 N
};
" ]8 n. h+ [; b& {/ l' s8 f4 }
! L; x# D4 y* u/ N. V7 Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 @9 a; K. ^" F5 V4 ]
.leds = da850_evm_tl_leds,# P% q- l& W" T/ |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' A! \5 V# l$ \% ?7 P( v# n0 P};8 o A+ Y5 E8 t& r) w6 u! ]# C0 m
& [2 x# X9 r0 e$ D: Astatic void led_dev_release(struct device *dev)1 F* J: u! A" V6 c: D4 w |8 O- v2 A
{
3 n! r, o# J* q9 S' T' p};
) p7 Z0 o" m& e& @* r- Y" S8 k: f. Y; y& ] P4 v
static struct platform_device da850_evm_tl_leds_device = {0 s) ~$ u3 h- ]" h9 {& m" y# F
.name = "leds-gpio",
4 E& T, q; |8 P9 `( x .id = 1,8 E8 c0 M9 F9 W, z( V
.dev = {
! {: Q6 R! a0 |0 {( f; R .platform_data = &da850_evm_tl_leds_pdata,& [2 W+ e6 F5 }1 q# e* L
.release = led_dev_release,' R5 L5 n7 ` [; f% K
} d+ {1 i) w$ G( t) E( @+ a
};
# H+ p# @/ P+ O. b7 N4 W. T( Z8 Z" z1 U# ^0 r; @$ _
static int __init led_platform_init(void)7 K4 D$ ~. E7 T" W/ ]$ N2 o8 D
{
7 Z- Z% [5 R% @6 W1 ?3 R int ret;8 P* ]4 s: F: W c9 r9 s
#if 0$ A% R p# F; b) M+ ~
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 [; W$ {+ S- G C! a if (ret), D% U6 v) _ \# a+ U
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% e1 T" M5 Z- p/ f7 Q- O "%d\n", ret);
; N2 \6 O' t( }! A#endif
! q$ m u5 e6 u( v# L$ A: ? ret = platform_device_register(&da850_evm_tl_leds_device);
; [& [6 I- h: G if (ret) b1 U# `1 o) I6 z' v" L. F
pr_warning("Could not register som GPIO expander LEDS");3 v) Y0 z4 l+ G" m* q( J
else% E* k9 D( u1 F6 [, @
printk(KERN_INFO "LED register sucessful!\n"); D$ }5 v7 A2 q! ^& Y4 s
& L. g5 A, e1 p% @* o return ret;5 X' M- \9 V8 r3 h- W6 {6 J% s
}
+ J, ]) b% ]0 w- k7 m2 Z5 h8 |; f4 z# P. O) l4 h9 X
static void __exit led_platform_exit(void)
( B% _& C4 x4 C{4 o% A) i/ d( l
platform_device_unregister(&da850_evm_tl_leds_device);
, V1 A% o$ O9 A' O1 K$ {" l3 e
( S0 a; Y `( | printk(KERN_INFO "LED unregister!\n");; _& _7 |0 I, i# }
}
4 m' X0 p- p; }+ P4 }- m
. I* c0 l7 ^8 O' F$ G8 a7 e$ cmodule_init(led_platform_init);
' o1 Q7 Q/ K. G/ T6 j lmodule_exit(led_platform_exit);
6 r& O9 i S! p- j( `* \! y8 b* H" m5 |7 w7 q
MODULE_DESCRIPTION("Led platform driver");
) d8 {$ n4 Z0 G% c2 o* FMODULE_AUTHOR("Tronlong");
7 o! Z% g* m- [$ ]8 b; qMODULE_LICENSE("GPL");
- k# F3 L9 T6 @ q" P$ l# N0 T& V1 J/ ~+ }
|
|