|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 P# @% l3 o, y3 w4 @0 K" }& N#include <linux/init.h>5 K. F7 C, H+ p4 f5 K
#include <linux/module.h>! d, o* P! ?9 ]5 s1 M
#include <linux/kernel.h>
- b; j3 X7 s- B/ F) D! T- N#include <linux/types.h>
% W, {3 W( h/ X! F, N#include <linux/gpio.h>4 T1 r) a# _! ^9 M. @/ J+ J
#include <linux/leds.h> ^, P+ `5 z; O; \( m3 \
#include <linux/platform_device.h>; \4 S' @$ L3 D: q8 j9 t
9 c3 q* O) V! J: o8 k2 o2 n#include <asm/mach-types.h>+ N- ^. |6 I; J6 H# P2 C
#include <asm/mach/arch.h>
7 H5 n4 x0 p" m+ P#include <mach/da8xx.h>
: P+ r' X, }# W6 b% V; H#include <mach/mux.h>
1 q# S. @( n; J9 k# D( B1 X# B2 W
) T$ z/ h! P1 u' e# V' J#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 \) N9 C& H: h1 R& S# F8 x1 ^#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 ^/ E* J% {* {% u! i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 a# h T; N' n7 o( S) [! D" X! l
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; E( U. V/ `5 U$ Z; K
$ U, e7 Q+ z" e* Z: j% T" C$ Z/* assign the tl som board LED-GPIOs*/! q# c( V9 w* _- \' X
static const short da850_evm_tl_user_led_pins[] = { u m4 Z8 y1 Z2 b+ b
/* These pins are definition at <mach/mux.h> file */
, E2 l( m9 p3 Y8 s/ { DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% n- W( L/ ]7 a* P& a+ z
-1
7 O4 V# n5 V5 Q0 y};
u' O4 _9 ] I5 d: n, o3 j1 g9 H7 R. e/ z }
static struct gpio_led da850_evm_tl_leds[] = {, y/ ^/ t- J" W8 i
{% C8 G/ \/ F: r! ]+ P% L
.active_low = 0,
8 c, l& F5 t m, ]& |. K .gpio = DA850_USER_LED0,
% T7 m3 I1 q, z( A9 t .name = "user_led0",& T" X5 s- \- O& O, \/ O! E
.default_trigger = "default-on",
1 g- S0 Y1 U A* \ },% ]# b& u$ Z8 N( @5 B+ O
{
4 F' D2 v/ U x4 R, s6 k6 y: c, } .active_low = 0,4 A1 |& {! M4 P
.gpio = DA850_USER_LED1,8 q7 I1 C* r3 E1 F: r7 ]
.name = "user_led1",0 ^" c" { F4 }& _- g$ `
.default_trigger = "default-on",5 D1 i! Y/ B& C3 d
},
, L# t7 `0 c2 [5 s( L' z {
8 ^ b4 Z! @' l( q: r4 [* H .active_low = 0,- @$ g9 V) L+ C' t0 o, L5 i+ }
.gpio = DA850_USER_LED2,
F& r3 W& E6 L" r3 [ .name = "user_led2",( d7 R$ x. Y0 }5 `4 S; x7 E; m
.default_trigger = "default-on",. w8 L1 ^( q; {6 L
},
" _- f8 ^- ]$ U' M- `6 j- O {
; e! p9 C% L h- h& R: C, c4 s" k, p- V .active_low = 0,
8 a" i: A/ w* I5 i& b .gpio = DA850_USER_LED3,% `. P/ ^ Q& ^3 T
.name = "user_led3",/ J2 ^5 F6 e U9 s4 i
.default_trigger = "default-on",
2 }8 u( X }: _# c3 g: W% W* E },% j- R& S* a, g* w& |
};' y5 a: v; x, s. m
( M f- }9 L) @
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 t, Z+ ~9 o% W- \8 V2 e
.leds = da850_evm_tl_leds,
+ _4 E, Z% R# h0 Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 ?5 s6 u( Z: G% j; q/ \};
, g" P$ |8 O" B* ^( x/ |6 ]
: f+ d y! P- E3 Jstatic void led_dev_release(struct device *dev)
+ w2 i8 g+ M4 X( v% c1 X{
9 \- s( c7 L# u% F};
* @4 M5 K/ ~; S5 `! J1 R& M$ J) p. s8 k
static struct platform_device da850_evm_tl_leds_device = {# F7 [' y) I4 o# q' ?# y
.name = "leds-gpio",
- Z$ {. q' h% Q0 x* e: p9 S4 H/ g .id = 1,
2 \( ]" Z: m. A4 V5 x .dev = {! f _9 W {" [) m0 A
.platform_data = &da850_evm_tl_leds_pdata,
* `# ^/ h& u2 w |2 e7 `' V .release = led_dev_release,/ v1 p t" D7 _/ A7 v& M5 p
}
% S7 I4 q. N& M k4 o% T/ Z# @0 h6 F};* V- U( ?" W0 [+ k3 P6 D
* m+ H: v0 E; z2 T$ Y
static int __init led_platform_init(void)
) U' t) T6 c+ K{: W8 W; G& N8 }8 E+ d3 f6 `. p; r2 H) r
int ret;6 [# W' L u6 Q6 x2 `
#if 0( \$ @+ b, b# [/ Z: l
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 D8 E) r6 E; D; S5 J
if (ret)6 K- Y# {9 b( B2 T7 \) U
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) `7 [* C: h" T: K/ | "%d\n", ret);& A5 C4 m) A8 K1 x7 z
#endif
+ y" A* B! @5 W* c0 k! h ret = platform_device_register(&da850_evm_tl_leds_device);
9 [6 b! B9 N8 }1 f if (ret)
8 k: ~3 n* v8 A. f) u; f8 h5 p pr_warning("Could not register som GPIO expander LEDS");* j: V0 ~ O0 b' W: x( H: C
else
) v) K) ?+ E" [6 q i7 R1 j; t printk(KERN_INFO "LED register sucessful!\n");4 [1 r0 ^2 H8 A( \% j, n
; `0 w. R0 u; d6 u P' | return ret;
0 S. M9 ^9 P# v8 [" l6 r2 }$ j}6 L: }4 L2 I( a1 q, V: F: @
* _5 t0 F& Z A. k- M3 K7 ustatic void __exit led_platform_exit(void)$ q4 D2 w6 c- R; H
{8 |; @5 E! D0 M" T/ l4 S% E
platform_device_unregister(&da850_evm_tl_leds_device);
8 g) W# n1 m3 q; S, u- ]- y- k2 p; P% S, Q
printk(KERN_INFO "LED unregister!\n");
# O( H- d& ~, Q}
* p+ H- k2 G$ Q) F# `1 q$ x/ f B4 S) S7 g
module_init(led_platform_init);
c( ]0 O, D! ?module_exit(led_platform_exit);' R# y. F7 B5 X7 h+ i# K
E( i; ]$ u3 o) P9 W0 t4 V- VMODULE_DESCRIPTION("Led platform driver");4 C: q1 G0 x9 S! N0 S8 {
MODULE_AUTHOR("Tronlong");, X6 A/ J. G% T( @) l L
MODULE_LICENSE("GPL");
6 Q K! m2 @$ k( u6 q
0 t9 n/ C$ |' t5 N3 I5 ^ |
|