|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 o3 A" K) |5 V$ }$ z" _! j% _
#include <linux/init.h>( G3 ~: k, J7 Z/ E
#include <linux/module.h>
, s$ ]* b( k7 w. ^) w3 l#include <linux/kernel.h>* r7 U9 G' [* `
#include <linux/types.h>5 ^5 Y5 s1 B D0 C
#include <linux/gpio.h>
/ X7 F6 y5 V) k6 c* t$ y, M/ I#include <linux/leds.h>+ n& t, f* d* `, U0 N' [- v
#include <linux/platform_device.h>
" k" r2 D9 x) u% k
4 s6 b+ X# n& ?$ i" `; }1 y#include <asm/mach-types.h>
6 ~4 S$ ]& g/ k7 R; |1 s#include <asm/mach/arch.h>
! l4 T& a2 k$ o m! x5 h#include <mach/da8xx.h>
0 j& Q* m7 k0 Q( H#include <mach/mux.h>8 t: h. S" K1 Q* s
9 `; b8 y' u. L# X/ G
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. k4 T5 I! k7 ]1 u! G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ Y! \; J; P. j0 i#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& _6 ^+ t# l% s9 u# G' ~ A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# X, `/ |. `( d( u
( n$ I4 l! d5 p8 ]: C
/* assign the tl som board LED-GPIOs*/
3 Q: M7 h, ~3 D: }# Q& G% wstatic const short da850_evm_tl_user_led_pins[] = {8 A' N! A/ z( s4 Z
/* These pins are definition at <mach/mux.h> file */
, `/ y( x3 @+ [- M7 F DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" b( C" B$ y6 b6 Y# h* R0 I -1
2 X) X. Q6 @0 q# y- v/ T) u};
4 K, V; K7 e3 M- k3 h3 ~* i; @0 P7 h, _+ `7 ?- v. r9 d0 Y0 ?. d
static struct gpio_led da850_evm_tl_leds[] = {' v# {: m/ b6 d( n& P( e
{
* }/ z! [ u( ^& V( b) u .active_low = 0,5 X) X* s& i- f" \0 {3 a% Q* A
.gpio = DA850_USER_LED0,
3 E/ }1 r9 R' o( |' a- L .name = "user_led0",% r- |3 t# [0 f
.default_trigger = "default-on", Y& H" p+ A j1 z) `7 |
},
6 e5 T4 R) {# Y) ~+ E {# `- T- x9 x2 h h" `
.active_low = 0,- ^, j$ _$ ~2 t$ m- a4 U z
.gpio = DA850_USER_LED1,3 H. F( k2 F7 Z# W" D6 a' S2 j
.name = "user_led1",
. a5 G+ t9 M# }; k; X .default_trigger = "default-on",2 F9 [$ O5 |6 V) E5 H2 M
},
; l) \! y N0 e" j' F. I5 F8 ~ {
8 v! T- `: Q% l/ H .active_low = 0,: n/ T9 @% o$ L
.gpio = DA850_USER_LED2,
9 m# [5 h9 h; ~5 h .name = "user_led2",
# d* S- D4 N8 k) g; z n% B) X .default_trigger = "default-on",5 E1 J }% k% {. i8 o- H
},
$ j2 k$ U7 M2 [$ g: U1 H8 V9 @: q {
+ [7 Z, k' e! B! ^/ K0 l* `& m* r .active_low = 0,, x# @ e6 m) b4 e. e! ?
.gpio = DA850_USER_LED3,4 P7 u$ |* c- r( U
.name = "user_led3",- f2 {3 F, E+ K4 [$ o
.default_trigger = "default-on",0 r( @: ^& t: N4 T' y5 `0 _1 N/ A. ^
},& O/ y* P, f$ s% _5 k, s& x
}; g2 y' H& Z* c6 b' p% V* D' K
$ C: n. i2 B" s6 q8 j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% v0 g! B( C9 S
.leds = da850_evm_tl_leds,
; P8 d0 \% T9 G2 b+ v% \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; k# G% {) o5 L
};4 k: o* O' f4 |( I' s! X: O
& ^. t1 P" K1 o0 |( cstatic void led_dev_release(struct device *dev)$ Q1 h& z3 Z4 b# C1 n$ H
{
/ i5 u6 ~( f) e1 d9 z# Q};
2 R6 W0 a2 W% c' I6 t5 {4 l1 a2 Z( A A4 d" u8 G! A E3 g9 E) ~% e
static struct platform_device da850_evm_tl_leds_device = {: ^% b4 E' `5 q" ]* O
.name = "leds-gpio",
+ d3 F$ Q; r+ o6 n .id = 1,0 `4 H" J' @/ w
.dev = {
! r% i' \6 `9 o" s- o o .platform_data = &da850_evm_tl_leds_pdata,
. ^/ b% ^3 q$ ^% @ .release = led_dev_release,( R2 P5 a7 \5 V& Q
}
' o+ ^$ A- L: N* ~2 E};
/ p9 D$ @0 J. a9 |" L( z+ M
5 d0 V# J! ]+ \- d& d7 X3 T8 }static int __init led_platform_init(void)+ ]) j% O# n6 D& D
{0 s; l0 B% E2 W9 ]: W' h2 {
int ret;( E' b& W* s* t3 s/ t
#if 0
1 h+ f; _; {! X: N( A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: e' _7 }, Q" ]3 J/ d
if (ret)$ x' q: f' I* Z& \- A! k
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 J' j I" |, q6 L2 Q1 x c9 g
"%d\n", ret);# A9 ^4 Y( t2 @4 W$ R3 z
#endif# p+ X9 x) g$ g8 r2 L
ret = platform_device_register(&da850_evm_tl_leds_device);
* h$ V/ K" i' k* x% \- X" J6 Z if (ret)
2 F3 j- \6 N& l8 C# w pr_warning("Could not register som GPIO expander LEDS");: P. P1 \9 U/ `
else+ T: F1 Q, J8 K; Q$ b2 N3 m
printk(KERN_INFO "LED register sucessful!\n");
: V$ o! I. T0 h/ ?4 E- u. P$ f6 r" ~. O% _+ B& I
return ret;
: ? q# o$ b/ ~, a}. n2 z7 ^% u* G! _) M, h) ?( J8 v
- x+ p. V& b6 S3 \; j1 u7 r% A
static void __exit led_platform_exit(void)
a3 E+ y( F" }9 V: f1 ^: g b{
+ P. L; G C6 \; ]! ?7 I platform_device_unregister(&da850_evm_tl_leds_device);
/ u0 s" l6 L; Z" _9 E+ Y" H @6 q' R7 J. Z
printk(KERN_INFO "LED unregister!\n");8 a' r" M* l, g/ n: j
}7 U: [: T4 a9 j! I
* s m% O2 \' f. f3 _module_init(led_platform_init);: d2 b1 P( G" E3 I1 X% i& b; x
module_exit(led_platform_exit);9 O: Z: Y- k: L) j
+ l! Z+ l+ n5 c; k8 ~) ]* d3 Y: K
MODULE_DESCRIPTION("Led platform driver");# K. w% l3 |- \3 z5 E
MODULE_AUTHOR("Tronlong");
4 x3 @! i: [2 A+ r1 HMODULE_LICENSE("GPL");8 G' L: F) N+ ?
. C3 m; g1 r2 t- M& j8 z# F0 i2 X5 u |
|