|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) {6 i1 k8 R6 r& ~; R0 s#include <linux/init.h>
2 m6 k6 ?2 ?7 A+ H) e1 r8 T#include <linux/module.h>
2 d4 B3 J- L5 d$ J#include <linux/kernel.h>
1 T; i8 I% O7 K#include <linux/types.h>
8 D6 N* v$ ^7 y9 x! r9 k; c* O2 q#include <linux/gpio.h>
4 w* J/ M9 h3 i9 m8 l#include <linux/leds.h>
& |9 s' Q/ E9 m& _8 l8 b2 R, H#include <linux/platform_device.h>; M2 L' O, d6 G' a3 A a! F
8 m$ a" i% ?, s' k @#include <asm/mach-types.h># V2 F% ]' u! k: r
#include <asm/mach/arch.h>
* [9 q/ K, f+ P }* M2 d#include <mach/da8xx.h>
! x8 e4 Z$ w0 i7 o! W( D0 p#include <mach/mux.h>% X! v$ g& R9 j# f5 U; U
. a. R( r: u0 ~3 J: o8 T7 j, c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 `* x6 Z+ [( W# M1 r; L1 T#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' d8 d; o2 o, j: x$ K1 j+ t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 i& i7 E+ g0 s: y d1 J* H. g7 n; K, N
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# ?% F7 X- h* G6 B1 E! z& g' I0 H4 b( E" y' s6 M8 }" P
/* assign the tl som board LED-GPIOs*/
0 |+ O9 M% C! y# Q* Lstatic const short da850_evm_tl_user_led_pins[] = {" _" T7 W2 x6 l& G) s6 s
/* These pins are definition at <mach/mux.h> file */# l. l& \& Q# t% v5 I( m; I
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- g9 S& E. t' d, m* a -1
3 o6 |! ]2 I7 V$ q};: U3 {1 w# j% n3 r
( G9 L/ p) v- D+ ]
static struct gpio_led da850_evm_tl_leds[] = {; T' M0 M% P) g$ h) n; e! e
{2 E8 ]8 J% e% ~% U7 O% L/ E6 h1 _, D; I
.active_low = 0,/ R7 O" X. i0 I
.gpio = DA850_USER_LED0,, q8 u' \6 l3 `1 v. ]
.name = "user_led0",- q; K; C6 {0 i# n p v _/ k+ A
.default_trigger = "default-on",8 y6 V8 r/ }& ~
},
: d$ X1 P% c6 M @ n0 R- \ {4 U4 e: D a* l6 o
.active_low = 0,- D; R8 W! G. r- ]) b! |7 k
.gpio = DA850_USER_LED1,0 ~: N) W' [4 N8 y$ D/ F' F: ^
.name = "user_led1",8 k F% b; a! ~. |8 [; s8 N: ? ~
.default_trigger = "default-on",6 Q! i9 ~; H- Y0 E# L& f. T& y+ A# m
},
* I% P7 S; r3 @! U% L- M& M, d {; Y" F2 D- x8 U' r- s9 A7 Y* n- [
.active_low = 0,1 h3 a Q) m Q9 \1 Q) E
.gpio = DA850_USER_LED2,7 k m: o2 d, a; o
.name = "user_led2",
# k7 u# Z* r: `! T .default_trigger = "default-on",3 h0 p* L2 E9 d1 S3 ?4 R
},/ U( A% }( N2 `" o5 G Q; X3 E
{
& |7 _3 [ @/ Q* ] .active_low = 0,$ ?( b* S( B' w" S+ L: \: O' e
.gpio = DA850_USER_LED3,
8 u5 {: J( M& D- @/ z1 q. A .name = "user_led3",$ _5 i1 B! D, v4 c+ _. D, d
.default_trigger = "default-on",
' b- x$ F6 `* _1 x8 d }," p' v' e, q) l& q' E+ N1 n3 z
};
3 `; o. Q3 O+ y4 X' ^1 V
+ w* d. Q2 O& m8 V A, k. K, Gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% ~7 w0 \2 |1 P# [, h
.leds = da850_evm_tl_leds,
6 Y2 c# T3 e2 m& e3 S& Z& r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# a# m; n* s4 s J};
+ S* j) Y$ }1 M! t5 h2 {8 s; ^
/ {. `: n/ t6 ^8 sstatic void led_dev_release(struct device *dev)& n( o$ o: [5 I/ b' I
{0 F* \2 Y% f4 g$ Q y, t/ f6 B M
};& v& h Z3 r9 j9 d3 ~- I
+ o" \* q2 l% E6 f( jstatic struct platform_device da850_evm_tl_leds_device = {
- B* F) }" E2 `2 f3 z% o2 b .name = "leds-gpio",
" A# }2 x% V# o) n9 L. x- s0 u .id = 1,0 F1 L9 m" W% n1 H
.dev = {1 Y s$ c+ d; e ^$ w* B: o' i
.platform_data = &da850_evm_tl_leds_pdata,. j8 B8 _6 d( g1 D/ S9 S
.release = led_dev_release,! l' G) F5 n, H4 T
}
0 ]8 I1 L1 b$ Q$ Z3 E# @/ I0 E4 b};
6 a s* B z. J& y+ k% c0 k8 s1 w- B' c: ^
static int __init led_platform_init(void)# W5 A7 {8 P- l
{
2 z& G9 t8 ^+ [* n int ret;8 u5 o$ b* n5 f
#if 0
2 ]+ }* G! ^ e0 g& a& F/ X ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 E M' Z, R2 d- w9 h2 t
if (ret)! |+ d2 k; k- Y1 W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! \: P1 ]6 h, s; N+ Q" G "%d\n", ret);2 [) N$ e! R! C! {; ^' S: F
#endif
# b$ i Y2 R$ `+ ^ ret = platform_device_register(&da850_evm_tl_leds_device);
' o% w. x9 y( {2 E( U if (ret) [) t |! S& Z6 ]) I
pr_warning("Could not register som GPIO expander LEDS");0 l5 X# C$ v" H0 ~6 d
else2 p* G' N1 P7 F0 _
printk(KERN_INFO "LED register sucessful!\n"); j5 Z& b. R0 f9 J4 y
4 c5 m4 f3 Q5 q A return ret;! m; b( m# x- ~& f+ R3 x- m, y( b
}
5 C( T0 g9 E: d J4 B
8 c; x* O' Z( p4 P/ {9 }1 }static void __exit led_platform_exit(void)
9 t& D: b' p$ b" ?# @" t{
9 T) W$ j' |6 s5 X* D+ T% i1 J platform_device_unregister(&da850_evm_tl_leds_device);0 A" z- q; @8 y7 D/ {
3 d T. G8 n" h$ @4 H1 V5 X
printk(KERN_INFO "LED unregister!\n");
/ k+ I. W, Z; k: G4 V! B}( ~3 t# O! ^9 D- T# z$ |( e
' e0 _- n# F- Q' c2 hmodule_init(led_platform_init);3 a" G- d# l$ f- l8 V; G& L) T7 I! _
module_exit(led_platform_exit);& Q( g! U3 [* s+ y4 o, ]
" ~& I( m1 c( Z' I* y5 K2 ?+ J; cMODULE_DESCRIPTION("Led platform driver");3 b! p4 D7 b4 _
MODULE_AUTHOR("Tronlong");
$ K2 _4 J X" |2 P! CMODULE_LICENSE("GPL");3 r" c' ?" m6 a1 s. {* S0 K5 @4 C
! g9 D8 I: X! @6 f5 k1 n$ W4 Q
|
|