|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 J+ v% S9 q# s) O, a" r& Z. K1 A#include <linux/init.h>
% g6 e5 v, u+ a" m#include <linux/module.h>8 |3 j# b. N2 W, i+ R
#include <linux/kernel.h>& M8 K; m) q( P* {3 U
#include <linux/types.h>
8 o8 i4 ~8 Q% E* z: v#include <linux/gpio.h>
) A5 h1 _, ?& {! s) T$ `: L+ n#include <linux/leds.h>
* V, z# W; \- {% j/ e9 u#include <linux/platform_device.h>% z$ N1 s1 c5 j9 p5 j7 C* P. Z8 E6 z4 }* ~
! K7 O. L/ N' M! K
#include <asm/mach-types.h>
* g) A; \! o- z/ Q, L#include <asm/mach/arch.h>
) y% e9 E( E: C#include <mach/da8xx.h>
$ w# Y+ y. D" K. Q4 G#include <mach/mux.h>
* ]; j- X, K5 L/ W8 P* N2 A' ]! m0 }& R2 X
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). |' e. {1 z+ j" L
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ B& N+ d @" \- `; I: L9 ^% ~
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) H$ R$ U9 l: |$ q3 e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 K: ]" x, w" b" N) k; L6 g7 j4 x- j r0 S& O4 |% b; L* F8 M4 E
/* assign the tl som board LED-GPIOs*/" M0 y1 m% R% J2 F
static const short da850_evm_tl_user_led_pins[] = {6 e" ~% [ ]1 J; U! H
/* These pins are definition at <mach/mux.h> file */
5 @) k& T/ R( n; f5 y5 v/ K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' S- D5 @. X X2 ~5 G -12 `5 Q9 F+ P( j5 _! v* S
};
X1 ^% [" s: l1 f8 M6 u% Z/ r. ] M7 o8 {- u
static struct gpio_led da850_evm_tl_leds[] = {9 h4 t6 P) G) D6 H$ O# c/ n
{
0 [- j; E. E: o .active_low = 0,
u$ E/ @0 q! T+ d7 F6 J .gpio = DA850_USER_LED0,
6 u4 ?" ~8 P' z/ m6 P .name = "user_led0",
2 T C) D+ O& G1 w0 H0 w .default_trigger = "default-on", _8 @7 K! v9 X% I" P1 r
},
% D2 {- V H% b6 X# C- X {
^. O9 ^) Y8 o9 N! L/ M6 \, L" ] .active_low = 0,
7 j9 k# N% T% Z .gpio = DA850_USER_LED1,
& E' ]) B" q2 Q8 c" K; u2 I( I' R .name = "user_led1",
# W' `) J) Y- [: q- ? .default_trigger = "default-on",
: d {" l* N& r* X, h$ a- { },
* J% Q, z; Y( ^" D {
0 }$ Y+ A5 Q/ \ p- K2 C .active_low = 0,, O% m4 M E& {, `( r9 L5 s
.gpio = DA850_USER_LED2,
0 N( Z: K3 f+ { .name = "user_led2",
2 A) F& |( e2 w. c( z# u7 _ .default_trigger = "default-on",( D$ Y% G [( u0 U
},
, L M. y/ u# u1 K+ X {) i/ D! V. y$ ]
.active_low = 0,$ n. x% O/ y+ J7 g) P
.gpio = DA850_USER_LED3,
5 b. N! N2 [" |% J( E- @' S .name = "user_led3",+ Y$ `0 f4 B, B* [+ u
.default_trigger = "default-on",7 l- w6 ^& W1 z2 N
},8 P/ u/ q6 @4 Z1 ?% v( j# h D
}; `' f( E0 |8 T; ? L6 N! \, Z2 j
- B- r9 o4 d2 A- N' ^: T* q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 F. H3 q/ _) G8 N8 d5 e( Y% q$ ~/ c .leds = da850_evm_tl_leds,
3 \# g, O8 V0 o$ t g5 L5 t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 j" s" L1 g d3 c7 q3 I};& t- @) [2 e, d8 m/ @
$ ~7 m' F: g+ m: A! Sstatic void led_dev_release(struct device *dev)
+ c+ Z4 V: k! I0 C& J/ R{/ m$ p8 ~& m- l- W" G$ ~; q! H0 D
};! Y) ?9 N% P# @ b( a: B$ ?. V2 B
+ y" D3 c1 u$ k
static struct platform_device da850_evm_tl_leds_device = {- G2 O7 I1 p9 E7 C8 b
.name = "leds-gpio"," y6 d$ T4 H( m4 s" f
.id = 1,
. V5 Q. }& D. q; J: b .dev = {1 _* g) _6 ^( h/ m) F, E
.platform_data = &da850_evm_tl_leds_pdata,
5 e2 U0 p: C( B+ p .release = led_dev_release,% T0 K8 g6 y: E1 a
}' ? y7 H7 c- E/ ?0 m
};& b5 I% l# X* \. Y
* n, s4 f1 E2 \3 F. {. k
static int __init led_platform_init(void)
7 T( g% J$ B/ u{
4 ~, X8 ~3 t4 `6 |9 r" I int ret;- m) I% Y/ k( `" n. q5 E* }5 [0 @5 j/ F
#if 0
Y) U( L$ ?7 e% M5 W' c2 y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# L3 h6 b9 | v/ p( H$ S if (ret)" {3 H2 W7 F' U2 H- l: R v
pr_warning("da850_evm_tl_leds_init : User LED mux failed :" a3 n: N9 P/ |6 ?" `/ v3 @4 X+ \% {- x
"%d\n", ret);
+ g# Y, B. ~5 _ @# N#endif
( F% L; h i1 ?* H, s ret = platform_device_register(&da850_evm_tl_leds_device);
) _0 G# g& r4 ~# z( V6 [ if (ret). ~) P! p2 `6 A$ u0 F( M" X
pr_warning("Could not register som GPIO expander LEDS");& F* \& D" p# H
else
, F9 [; O, @6 o% u i9 m& [ printk(KERN_INFO "LED register sucessful!\n"); q. K( }) e; ]9 M" b
# o! q+ @! M% u* k# h
return ret;
; @8 }6 ^9 J, S2 r- N}
: Q" r" h* L! c4 f$ }/ z r3 c7 b0 w, D! ^) F
static void __exit led_platform_exit(void)3 L& \& I9 B1 e+ Q8 j* @% Q
{2 s/ T# s4 ~9 U: f1 c I* [3 I3 X0 E
platform_device_unregister(&da850_evm_tl_leds_device);" S" Y2 k. [! A6 d% u. Z( Q" k6 t
6 }: f. f, N% J' K+ T4 ^* R
printk(KERN_INFO "LED unregister!\n");
5 O, \3 o% N/ W* m; a, z}
. K) X: N; v- c! L* D+ |
& j9 g7 X9 N- f$ X8 zmodule_init(led_platform_init); }* l1 f: k2 Y1 @/ h
module_exit(led_platform_exit);# L0 B7 [& z8 P0 N8 d
# i' N" u; w5 ^% O3 n2 b/ S( K
MODULE_DESCRIPTION("Led platform driver");
: h; t4 ~# ~1 @) h) F. _* V( \: rMODULE_AUTHOR("Tronlong");' s$ i' w k( Z1 z
MODULE_LICENSE("GPL");
2 |2 o# d+ D* B9 x0 U2 \9 T: `! L Q( u& y" i5 \
|
|