|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 _1 x0 z6 i; R5 e N: r#include <linux/init.h>% U; c6 g8 p6 `& u: G+ M
#include <linux/module.h>
7 ~( G p& t- z. m/ z: V#include <linux/kernel.h>
7 n% o$ I6 }* b# T- Q+ i#include <linux/types.h>
: J+ h9 x! K; X6 t! T( G7 _#include <linux/gpio.h>
6 n5 o* ^3 a* u2 n" v8 h8 S: N#include <linux/leds.h>
+ D! O3 }& ^: D8 ?#include <linux/platform_device.h>
, w: F, f" K# u Q8 }3 B% f
6 F9 V' z4 J' [5 b/ d: Z2 K8 M#include <asm/mach-types.h>4 v# v2 @# [. A& v! v4 A
#include <asm/mach/arch.h>9 R" j% t: z( H* R
#include <mach/da8xx.h>$ U! q2 ^, k3 a( Z
#include <mach/mux.h>! R+ D* o+ h; f" d& F
7 m+ R- _/ o2 s5 k#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 _$ N. S4 @4 F4 c/ a( Y. g#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" t. R2 t; o3 R/ e2 W+ t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 v( T8 J+ r4 t# m; j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' ^9 I7 x" q5 ^3 W; \$ [/ d. D# n1 X% A6 ]8 D4 @8 m
/* assign the tl som board LED-GPIOs*/
6 v. Y, l) q. v! z& n5 Qstatic const short da850_evm_tl_user_led_pins[] = {
9 G" T! G2 K, S0 V( a /* These pins are definition at <mach/mux.h> file */
+ E! k% I) h3 @ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* s' ~( m0 a5 x -12 P$ S% O* ?5 n% C* d
};
f9 k2 K% G( S9 G1 Q7 l# e5 U8 Y1 H3 V3 S& d$ {
static struct gpio_led da850_evm_tl_leds[] = {
9 t& [ v+ e4 H: q) J {
8 n) {, f L3 p4 m+ y( K8 Z, w .active_low = 0,
. c3 K1 i/ L4 m# s .gpio = DA850_USER_LED0,
; n* A, m0 F, h l .name = "user_led0",
0 b1 U; u9 |3 x .default_trigger = "default-on",( |4 E, q0 P8 O6 K9 T( i) i/ i
},
8 P0 D7 Y4 p+ \2 E3 t) s2 s {3 t% I/ e- N/ j( f
.active_low = 0,
6 f- D! D+ ~' b& w7 T! s .gpio = DA850_USER_LED1,
7 G' H' P Q' v$ F .name = "user_led1",$ ]: m; B1 e8 x
.default_trigger = "default-on",+ [# p9 |# _/ e/ X
},
' a+ U8 p* t/ T% | {! n" V7 z' }+ N* C; A
.active_low = 0,
0 ~# r+ Y9 D/ i5 P+ ]1 n4 B% ? .gpio = DA850_USER_LED2,
. L2 Z) Y: s) S/ X3 M+ p% l Z: p* q .name = "user_led2",! ?% D- d4 ^6 y. m& X) o
.default_trigger = "default-on",4 J w9 F T8 f, c$ o1 e) o
},
# A: f) B% ]# w0 D D {
9 z- g E4 t3 a# D4 ^$ l8 E5 c( j .active_low = 0,3 Q# P; E0 Q+ P s+ e% x/ v
.gpio = DA850_USER_LED3,
# v( J+ {, A$ m: I( a$ n U% H: p+ H .name = "user_led3",
' J8 }3 P5 j' k0 c& \ .default_trigger = "default-on",
0 w6 ?* k- j, T: x3 E# i% m },
; A1 b" D6 ]6 u" s6 w: O- m};
, J8 C) k& j) C# E" I
* D) t: f7 N7 z2 h Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 z& `: P6 k% {! r! J) U
.leds = da850_evm_tl_leds, ~+ u& N& |5 Q# l4 o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- ~" x: E2 w3 L& j$ y5 G+ @};
+ |2 O# Z# x" f; k; ?5 X2 v& g" U7 M) B, I& \7 Q& T
static void led_dev_release(struct device *dev), N' ~; Z/ D1 j4 K1 J+ e
{
2 ~5 K, a0 `6 o# q};
5 t9 \! n* ?5 @0 p+ s/ l" H. \: F* t" ^6 G4 S( B
static struct platform_device da850_evm_tl_leds_device = {
+ f6 E! p5 m/ ` .name = "leds-gpio",/ `3 ?' B3 ]; V5 D2 E' c5 p7 `
.id = 1,0 H3 a& ?6 w) @8 C3 p
.dev = {
6 Q2 G }% \0 M' A7 ~ .platform_data = &da850_evm_tl_leds_pdata,
$ z: g g& \: }2 ]3 q$ t& H- a .release = led_dev_release,
9 K2 G; s! a" R1 o* E) J; Z }) k3 S1 y2 x9 o
};
+ P- W, u0 i0 Z, F, |9 r' q; S& [# `( w; [) x7 p& U m
static int __init led_platform_init(void)
8 V: M) F( H( R5 R+ {5 B" p0 b{7 f0 W! R! ^0 o$ {; ?- K
int ret;
7 y0 a) y2 h( B/ J) A3 y0 u#if 0
( D8 [; ]! o, g- Q2 G ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 J1 q: V: ^) J7 G
if (ret)% E A1 T4 e( O! Y- c/ N: c
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 ?& N9 Y+ O; K* g, H. [" I9 u "%d\n", ret);& V" B6 q5 Y; `' _. `$ H
#endif' R) A' \5 l# N& X
ret = platform_device_register(&da850_evm_tl_leds_device);
# D c0 P# g# d2 J. J& o* J+ g Z if (ret)
1 R) [* o; C9 B& x+ y! r8 N pr_warning("Could not register som GPIO expander LEDS"); o+ V2 k1 N7 e* e
else
d0 g9 C! T) c* P$ {& \ printk(KERN_INFO "LED register sucessful!\n");/ C! V/ Z( R2 F6 `, t
' Y- z+ C( S/ I& a, D) e) J return ret;
9 p. @; y3 e/ B}
- H# ^5 }8 \) p; Q6 t4 W: q5 |+ @, Q* R+ W2 S' e/ a& _
static void __exit led_platform_exit(void)6 P3 x2 @- _. r1 T- F: x
{8 P% ?, Y r2 U: f' N) R# K
platform_device_unregister(&da850_evm_tl_leds_device);" ]1 \9 l% x: S2 ~0 d' v4 X
" Q* I; k) a. F% P/ V0 f4 B0 a
printk(KERN_INFO "LED unregister!\n");
6 G' [1 W" V* b8 M! t5 S; {}
7 ?; @! _* q( \% S! m( x b, b' F1 L @& F- _
module_init(led_platform_init);
( E- \& K% c/ Tmodule_exit(led_platform_exit);
7 m! l$ ?; T) V
1 M( v4 _$ k0 g# c; H5 @% ^* G# zMODULE_DESCRIPTION("Led platform driver"); z7 o$ z7 J/ l9 Y" p
MODULE_AUTHOR("Tronlong");4 E- ?6 I* X! t# t" r
MODULE_LICENSE("GPL");& i. W4 p k0 K) v" d8 O
+ C4 r3 r- v E. j1 h/ K |
|