|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. X/ D/ \/ T$ s6 @* ]; W4 x
#include <linux/init.h>0 a3 [6 w9 T8 b! w
#include <linux/module.h>( U% i! g2 X* U$ Z
#include <linux/kernel.h>
( j# v8 U! ^: P#include <linux/types.h>
0 w9 R6 y; |, x$ t! z#include <linux/gpio.h>: c3 ]% [6 ^7 o" i2 w# ^
#include <linux/leds.h>4 I/ ?- }& ?+ K9 q% N" o% |
#include <linux/platform_device.h>
: p1 T, \, }3 x8 x( B4 z W+ S( \" m. i9 {7 R: u( T
#include <asm/mach-types.h>+ @- T$ h- U4 b( R3 ?2 x; Q# G; T
#include <asm/mach/arch.h>
2 }, Q; x& V, k$ X6 Q r e/ x#include <mach/da8xx.h>
0 i, x+ H+ i" q: m; p5 E#include <mach/mux.h>; b3 e* ?. Y6 ?9 [8 e; m, j
; n- c; g9 Y" k' i" F2 J# z/ N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" V' {. O! x( Z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# x. |& h& ?! A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' B5 D* T" g9 ]/ B( T9 \9 t L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- m, p' B' A3 H) m o8 E
: D* H F, q( f% w6 E$ ]/* assign the tl som board LED-GPIOs*/
C, Z6 C+ r1 V$ X# \4 Ostatic const short da850_evm_tl_user_led_pins[] = {
# f, k4 u: R4 _/ a; v" i /* These pins are definition at <mach/mux.h> file */
5 {) r( R& m+ p* i DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 B/ a7 ^5 B" P% C; P% ?! ` -14 [+ p1 o: x+ A0 A/ `
};+ C# B0 K! s. K; s [& T& {
; ]3 p8 N$ @$ J% v; x9 @/ ^
static struct gpio_led da850_evm_tl_leds[] = {0 V% @5 U6 r) Q
{! z0 x7 X3 E- G$ `% S3 z' O
.active_low = 0,# m8 G# E( T; P2 D
.gpio = DA850_USER_LED0,
2 S3 v- e8 J2 H& r! X, I .name = "user_led0",
. i5 ^8 l: ^! g/ @3 @4 V, o .default_trigger = "default-on",. S& I f N; v1 K8 o/ n C$ `
},
7 W# [! L7 M( H9 X6 J, ` {! Y% M8 s/ Y- `$ V; u) k
.active_low = 0,1 B1 A7 g; Z6 Q+ M4 M& t' y( N: X" c
.gpio = DA850_USER_LED1,1 p/ Z! ]8 R- J8 J, n" U$ s- O6 P
.name = "user_led1",
# v5 g5 ~. G A( G) i .default_trigger = "default-on",. G! B; Q9 y+ a4 n% L! i9 _
},5 L$ A. }9 q0 p) o: s* i
{
/ c# w3 h2 m2 A" ^$ G8 s2 ~ .active_low = 0,
5 E, n' i6 x6 t. R .gpio = DA850_USER_LED2,
1 ]0 B; W! K: K& `) d# P& W. o .name = "user_led2", u. r n# X% x% X; h
.default_trigger = "default-on"," v& z0 N8 [) Y8 {5 {! K4 z
},
2 H f0 H* f: V# U5 J7 y {! E0 x% O, o# ]
.active_low = 0,# j+ z: @5 B9 H! ^' U
.gpio = DA850_USER_LED3,
- _/ r7 b/ M6 T .name = "user_led3",8 p& z" V; Z; [2 M
.default_trigger = "default-on",4 x0 Z; n8 O; N0 K- D) i
},
$ d8 H* p1 _% ^$ I+ p1 E};/ l2 a b: r$ s) z+ c4 p W
7 n% W; J, |! ]8 Y! i; J( X% C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 r" `' i, i1 n; x* `- i- K$ g .leds = da850_evm_tl_leds,9 d. j$ l+ ]+ @) s, e! O; ?: Z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 m7 b% X3 M7 A! u% X};
; o9 R3 ~1 ?* U$ k3 ], R2 ~) V
B& L, e& p& R; U& ?static void led_dev_release(struct device *dev)
/ H0 y3 n% x% @* i{9 `+ h$ }! w& Z% R4 t
};
( x' |4 e- V# I, }1 H) v, ]; t" y) d: K9 j
static struct platform_device da850_evm_tl_leds_device = {
8 s% Q% N7 T4 T/ Q .name = "leds-gpio",
( E+ G7 J3 e/ Y/ t" A .id = 1,# p$ p$ ~. |, G
.dev = {
h/ T! E. O+ G/ S .platform_data = &da850_evm_tl_leds_pdata,
1 x/ t8 H8 P" ~/ m3 d: Z .release = led_dev_release,9 P4 _, M4 {, X! K4 L% q7 l
}
& [7 d+ M$ ?& b}; m! [% L# Y9 J) r
' o) e! b6 F8 Y* Y( Ustatic int __init led_platform_init(void)4 O! p& L) o" P% n. }
{
9 p _: J- x7 L+ R8 t: y int ret;
& `+ G6 x5 m! m& ~#if 0
4 s( N3 [) l3 H ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! ~" W; R, H9 g3 _3 x% v' H i if (ret)
8 V7 y1 s3 K) O4 B$ h7 J pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& P+ K; V( X4 ?3 M "%d\n", ret);+ Y% R! Y% q9 y1 E& { k- ]
#endif
, K+ L/ _5 h7 o ret = platform_device_register(&da850_evm_tl_leds_device);
2 z, e7 V. |3 O$ n3 Y6 D if (ret)
' A# A, F6 O- i: \9 S pr_warning("Could not register som GPIO expander LEDS");8 c3 r# Z0 v1 U& d0 M% Y
else* u5 i9 _" c( K
printk(KERN_INFO "LED register sucessful!\n");
' W9 t! G5 z) b9 ^# Z. ~# ^# f0 p: y) @8 X
return ret;
* g& B. j5 n. o% [7 h2 s* ]2 d% u5 v}/ U7 M4 m/ `" ]
% R0 A& |" | ]
static void __exit led_platform_exit(void)) S" W; O; C/ ^
{
0 B, m' b- f* x) l2 C8 a4 `# W) \, C platform_device_unregister(&da850_evm_tl_leds_device);+ z, ?/ \7 l1 v4 N; i; B8 L
6 o* c" w& e& r( h( @ printk(KERN_INFO "LED unregister!\n");+ F+ Y; o8 g$ Q3 X2 E& n% I1 e
}0 L& D# f' o+ {# [
1 d$ G& _4 x q* B* ?: Z: I
module_init(led_platform_init);- T) i7 p, u* o+ ?% @/ \. D" R" {
module_exit(led_platform_exit);6 Z7 n' j' N% T7 [
9 q% O- |( [" y. ]9 V7 s T! Y. f9 QMODULE_DESCRIPTION("Led platform driver");
' x M" l) t: W) A8 m, sMODULE_AUTHOR("Tronlong");& j( P0 i. i+ L, F* z! J
MODULE_LICENSE("GPL");
) d6 E; [& R* U3 S4 H1 r" @* v, j2 F# z* k; J# a
|
|