|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' a- ?' c [0 M% A
#include <linux/init.h>9 s0 m; g' z& c/ ^* p% n
#include <linux/module.h>8 z6 |8 C% Z* n+ }
#include <linux/kernel.h>- d4 X9 C; E) S# @0 N0 V
#include <linux/types.h>
. w. E( F+ J% l' h4 B. q! O#include <linux/gpio.h>
6 g: Z5 S7 o; i#include <linux/leds.h>
, g3 d- O2 j* F; H5 H; ^#include <linux/platform_device.h>9 c! a' W" o4 E: O- W- t! A/ P
8 U) }6 n/ ~; h#include <asm/mach-types.h>0 D$ C1 C+ p1 G3 d6 \
#include <asm/mach/arch.h>
3 J3 e1 \- X4 ?$ k#include <mach/da8xx.h>; L1 @+ l+ G9 ?: `
#include <mach/mux.h>
" R2 k6 u2 C* t3 e6 k; T* r
5 ]5 o! r5 x; ]5 y1 c- J2 z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) A" z; H2 A9 p# F. o% `( c# M1 k#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ V+ H' @7 f l4 @# T* @0 j0 q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 }6 I8 n3 ^$ N, a0 E6 ]. h& L) U% }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" q6 D$ `( _8 P; d5 Q, E
) }3 q Z& z) `0 ?
/* assign the tl som board LED-GPIOs*/
6 \: {: h8 Y/ M1 z3 {static const short da850_evm_tl_user_led_pins[] = {: P. m' F- w3 f; R& Q
/* These pins are definition at <mach/mux.h> file */' r# f; R4 c6 w: J( m n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 j$ \4 B% e9 ~7 X+ k; a -1
2 ^& E) E! }. G" t( k};
g5 J. _! v/ D `8 F- W
) N' Y; D4 i6 x. f+ S; Dstatic struct gpio_led da850_evm_tl_leds[] = {
3 x# q3 P/ w3 B' m6 j {! }- h U0 ~8 B; C+ X# j
.active_low = 0,9 f' x) g4 P$ p; D
.gpio = DA850_USER_LED0,
! U/ n3 h a6 t0 @( ~% s' A1 f .name = "user_led0",% r% ^- u0 g& t' t. o6 i
.default_trigger = "default-on",' [* ?6 l3 d/ ^* M8 a
},
+ {' U1 C0 \8 X: K {
8 s# X0 m0 m7 _( c' g% x .active_low = 0,* l/ y% E( a3 w& O( ?. J* l
.gpio = DA850_USER_LED1,
$ p* a R k' P7 F* P4 C. ` .name = "user_led1",9 H$ M `- k% c, J) o
.default_trigger = "default-on",6 m. H/ H) B# F2 d1 Q
},. z& W& ^& c$ W
{
6 Z4 N' m! U; [5 J/ b& `# `9 z .active_low = 0,1 x: K/ e( {! [ [$ t$ q) _
.gpio = DA850_USER_LED2,
3 i0 F) c6 I: D8 Y1 ]7 a& J .name = "user_led2",$ ~$ B1 s. Q, h9 p1 ^3 v
.default_trigger = "default-on",
( {1 [0 S$ Y; b* [* S' j$ d! P },
0 A) q9 }1 p! t {9 A' L8 k) Y" `! [6 M
.active_low = 0,: d0 e* y/ @' g
.gpio = DA850_USER_LED3,
# |% g! N. ~- C6 K .name = "user_led3",
+ e' B% |" w& Z' t .default_trigger = "default-on",' Z5 a: \2 u g' b0 y6 ^
},
% T7 b8 | z( S9 t, V7 `};0 D" J. m% d4 U E/ N1 l
2 r t/ ]. i e' N8 p7 h6 y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 Z& A- [9 w+ ^! @% D .leds = da850_evm_tl_leds,
# s% `& U# M4 l# ]) J0 k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),) F' A% ^! @! \
};
! b( V0 c5 h3 |3 N: j6 ^ k- A8 Z C# c% ?( N. }' N
static void led_dev_release(struct device *dev)2 s2 K9 g( y% r" q b3 [( o+ [" v
{
5 }' E4 O, X. f+ y3 Q1 i7 b" `};" l% l% C7 L2 }$ Q' M8 {
8 r w* v) F6 s/ H$ ~static struct platform_device da850_evm_tl_leds_device = {7 ?# K5 X, |0 }& h" H% B, h5 u& W
.name = "leds-gpio",: L$ a: U+ B j& \
.id = 1,2 t: W- @0 y4 d
.dev = {& w1 I5 r! T7 l0 K8 V0 f$ f
.platform_data = &da850_evm_tl_leds_pdata,, ]: D& A' T2 S% t4 ]8 |8 X
.release = led_dev_release,
' J. E, B- i2 z/ `0 w }
7 Z# F* S L! P( N};+ Z' P' g2 f) G l4 C
/ H3 Z, c7 z0 E) o/ z2 ]
static int __init led_platform_init(void)
; }/ |; e6 F, [# R3 G{3 e3 C% q) G+ u' B- A) Q2 ^4 ]6 L
int ret;/ y$ `3 S1 O" [1 o" p0 G$ c
#if 0
& c) @3 K- ^- Z( C6 l' m( n! g5 F! t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' ?4 K' @& W4 `) g; U( w, I if (ret)* g @% J, N V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' Y; Y1 y0 o7 c% l9 z% b5 s
"%d\n", ret);
$ C0 k4 c+ p% z#endif$ X# m+ T/ v2 f9 B7 _! D9 q
ret = platform_device_register(&da850_evm_tl_leds_device);3 Z: m! w5 [. z7 R
if (ret)5 L8 N+ A% Z/ d0 K, K& W
pr_warning("Could not register som GPIO expander LEDS");
! }; ?- N2 ]( K1 `0 d else
4 E a! T6 ~' O! c0 R0 E+ v. ^ printk(KERN_INFO "LED register sucessful!\n");
% C9 P4 D+ O' D. Y) v* i9 c, ~% Z2 k* r# ]4 E9 x, m4 }/ u! r
return ret;' Y6 L. u* M2 Y# |) }/ f- t. _
}
* |9 o) {0 N+ D& x# _( B L& B4 F; ^- H7 l$ u6 h8 p( D
static void __exit led_platform_exit(void)
/ K, i( w$ R8 G) V$ Q{/ [1 l+ a4 r$ e" D, x% V1 {6 K
platform_device_unregister(&da850_evm_tl_leds_device);
( l# X: n6 l0 m0 u8 C) n3 [+ Z/ J! ^. K+ x8 \
printk(KERN_INFO "LED unregister!\n");3 S; y# [$ ?! r
}& j1 Y5 z! j6 B$ L0 k3 c7 J
% b" b3 \" B0 x+ l9 O, vmodule_init(led_platform_init);
' D8 T! Q4 r. f% i V2 ? Pmodule_exit(led_platform_exit);
9 T7 ?+ r: w/ X! ~# u( k! Z0 N) F6 j, N! G# V/ \( E
MODULE_DESCRIPTION("Led platform driver");
7 t1 x0 e; x7 z& G. D; {9 eMODULE_AUTHOR("Tronlong");
: T2 s& S. O0 T# |/ tMODULE_LICENSE("GPL");+ K' h) Q' D- W1 J" @2 `" x# y3 O
! u! ^+ ^" F* z. }8 ^# ^ |
|