|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 Z3 k o6 |5 M1 n7 E" R
#include <linux/init.h>
( ]0 I4 N! r: I& A. _* ~! m#include <linux/module.h>
) f# Q6 G4 }! d& ]! ?% \& a. N7 Q7 S( L#include <linux/kernel.h>1 \3 M% X6 g$ w6 C
#include <linux/types.h>
. O4 k- ?$ w9 G* d W% V1 b% T* H# V#include <linux/gpio.h>5 G, J3 c. z! c1 q: F
#include <linux/leds.h>( a: r+ X/ V8 y9 k' Q9 Y1 E
#include <linux/platform_device.h>
) k3 I" l/ D; h' u g2 U7 v9 f1 Q
7 O3 {+ o$ a- ^9 G' H#include <asm/mach-types.h>7 l* q' h1 }0 l" i6 W! S
#include <asm/mach/arch.h>1 s' i1 ?: h) f7 ?" Q
#include <mach/da8xx.h>
: O- M; Z% }+ v6 f& ~#include <mach/mux.h>
$ J, N$ X2 J& t2 q9 g
2 W4 P! r% m! M% b1 g" S& B#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) x/ G& a$ m. _; N% ?! b6 J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 m( a0 P* R$ r- G5 o, Z
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 {4 Q% b0 p% \1 O2 v0 ~5 W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): d/ Q. _# Y8 z$ g3 t: ]8 I8 e
. R% O8 Q$ f6 `8 a" ~
/* assign the tl som board LED-GPIOs*/. o4 Z% o: c/ n5 C& y# g
static const short da850_evm_tl_user_led_pins[] = {( V9 K) y0 ~! N5 E" m
/* These pins are definition at <mach/mux.h> file */3 y+ y2 w9 O- O
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* [# s+ k4 O& s$ [( c% ]
-16 H2 a6 |) w( z$ O3 ~
};3 i9 K. y8 a# q7 @7 E! q1 _$ n
& ]3 I* ]$ l+ E o& {
static struct gpio_led da850_evm_tl_leds[] = {
. j: T( o4 d+ |* @( t {0 k6 P1 e4 _$ L) e5 |
.active_low = 0,
6 a7 _0 r8 ^& ]) J k* N) q .gpio = DA850_USER_LED0,6 x8 ^5 g: L) Q5 p- M9 _4 Q
.name = "user_led0",( f" H& H. \# W0 K: B/ q( j* t- _
.default_trigger = "default-on",: X* p9 F; G0 }5 {% p8 Y
},
$ y, z+ G* v+ k/ N& r# @ {; `( G. p% a' I/ O D& H4 B! _
.active_low = 0,
, T' ^; R, x$ r, G, k1 Z .gpio = DA850_USER_LED1,$ d3 O/ D7 ~; f. D* i2 x
.name = "user_led1",5 i( d' r; E- [7 a$ Q
.default_trigger = "default-on",
4 V, y! G1 U: n' @% ?3 |$ m },
( k7 L5 y6 g" c; g% r3 c0 b' i {
2 Z2 G- H2 ^3 t, {; c& H- g- I .active_low = 0,4 m! R% c. u. j4 Q# i% C
.gpio = DA850_USER_LED2,
4 y0 w1 N2 h7 d0 {' u: k' c. C .name = "user_led2",- @6 K5 k7 d: F
.default_trigger = "default-on",
9 j! L: j& M( z: A/ [ },
' I$ @+ |, y0 i2 z2 B+ ~ {4 x d/ R3 S. T4 R& c
.active_low = 0,
% K, e2 s; C+ L .gpio = DA850_USER_LED3,
. _& d4 a- T m" v6 M$ n .name = "user_led3",
: d, Z% m+ j& S2 S .default_trigger = "default-on",
: Y' a8 i0 c: R },9 l5 \) z! l5 }5 D2 W: ~- s- B
};
) S1 g$ ~9 t5 r# u0 p9 D+ \9 z! C$ [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# Y w1 T. r3 `9 P' p- f .leds = da850_evm_tl_leds,
5 h! |2 H/ b" z3 n r4 d7 x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 [8 ~- R# r) R/ L$ o& n: o, ~5 |};
9 ?1 Q% Z/ a3 f$ R9 R( D( T! f9 b7 @& ?. q( R d/ l1 A
static void led_dev_release(struct device *dev)
: y t3 Q8 H) s1 \. l) b2 p{& a5 j! H9 j! l3 [
};
- F! U$ J3 I1 _) w( c* l/ m% T* z( }: ]
static struct platform_device da850_evm_tl_leds_device = {1 S; V4 Z0 c7 v& s: W5 F
.name = "leds-gpio",
) K4 v* Y; Z \; I B/ a' j .id = 1,
7 p6 H! [% K2 s0 P* ^( l8 N9 U .dev = {* m% N! k! O4 m% z& P
.platform_data = &da850_evm_tl_leds_pdata,
5 I; S/ ]6 w2 F4 C6 M .release = led_dev_release,7 T; [& g. ^" d* p3 I
}8 l3 p B% X, [
};
/ I& y7 x% u; I
. ~0 w, X) H8 v2 w5 Pstatic int __init led_platform_init(void)
$ J$ }4 U- ~. p j{
t8 t" j5 `. |& w( v2 U( Q1 o+ P int ret;
% D" G+ l- A9 b" G5 w2 q8 q8 l#if 0, C9 ~) P4 p5 K3 x5 z- G7 L( \
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 ?) B, G. [5 Y7 s. Q! X# N
if (ret)
2 K1 k0 f# q7 I% t% ^4 N) L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ y8 G g4 n ^3 F
"%d\n", ret);
2 ~7 ~# K- m- Y* X2 A2 V. S#endif V2 H; {( Y6 ]
ret = platform_device_register(&da850_evm_tl_leds_device);
6 \7 S' M: P: m* U) W if (ret)
u/ k1 i$ c& I( D9 g8 ^, U T/ N pr_warning("Could not register som GPIO expander LEDS");& q/ `; Y' d) o5 g% X4 i1 e
else
% N" F: h. S' v) G printk(KERN_INFO "LED register sucessful!\n");
2 w5 e7 q% f5 u8 A& ]. C- J
4 }1 d8 a* D: N, l5 o% ^ return ret;
+ }5 G8 r5 c. Y* B5 U/ k}
+ ?" S6 O8 u! ^2 l. X0 V
$ R4 K) ~& B) {0 l# dstatic void __exit led_platform_exit(void)/ d$ F' N6 \% f4 O$ ^+ M
{
$ ~5 ` ?0 {7 M platform_device_unregister(&da850_evm_tl_leds_device);6 H- R8 y! ?- d
) H6 e. s- ]' _; [
printk(KERN_INFO "LED unregister!\n");
8 t4 x9 P; ^8 v H, Y$ ?}, {$ s+ h4 q! D+ ~$ e
( m+ v7 y0 G% d
module_init(led_platform_init);. l H& ^. q# R2 E9 r
module_exit(led_platform_exit);
' \3 a# F1 p* b+ X+ ~5 S4 f5 _
/ w- x2 _6 u' z; z( qMODULE_DESCRIPTION("Led platform driver");
! y9 g# d8 X9 N2 d0 M# WMODULE_AUTHOR("Tronlong");1 r. h4 e, y1 e' V7 J
MODULE_LICENSE("GPL");7 V% L4 ^+ _- i/ H' p: d5 u- G; `
. g1 l9 U6 g% p3 O+ M% A |
|