|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 n% |" E& C0 W& J6 u5 A8 `3 U) I& P#include <linux/init.h>' M- f8 U) f! Y! |# p1 B
#include <linux/module.h>6 P- f+ _% F# t& u/ J
#include <linux/kernel.h>
* G a4 O, c Y; I2 v6 [( R8 |4 u( A#include <linux/types.h>
, s# `' _. @6 X1 s8 |#include <linux/gpio.h>
9 ]- h1 t6 e" t& x#include <linux/leds.h>
! Z* Q( k' R7 h& ^0 \# Q#include <linux/platform_device.h>$ S# @9 U9 \7 ~* i9 V
$ e/ V1 b% l% H: u+ D W$ L
#include <asm/mach-types.h> n7 D/ W+ J7 K% o
#include <asm/mach/arch.h>) I) r* @% l0 p) x" f
#include <mach/da8xx.h>+ ~; o0 c- X2 d
#include <mach/mux.h>
7 N8 o- u8 \. O* z* n1 Q5 Q! t4 t1 W# c O0 N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. {" ^! I0 a$ N9 z+ Y9 `# @' p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" N8 I1 v/ ~. p. h% ?! B' |3 j+ P$ P. b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% {' k# v( N1 t& A7 G' o
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( O3 X l- K7 u
( f0 N: F6 N7 W0 Q/* assign the tl som board LED-GPIOs*/2 b8 X e3 i( s; J
static const short da850_evm_tl_user_led_pins[] = {
) v, H. K8 G# A2 M' U# D /* These pins are definition at <mach/mux.h> file */6 _' H# T c: {% T# E
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 K$ u- e4 N' B1 n& R -1$ K6 B% d. [/ }' b0 J, E6 b
};+ j& u& t. b& D: H) w+ M
B, D! F+ C3 O: _. N
static struct gpio_led da850_evm_tl_leds[] = {
! p; y2 s5 m" E1 b$ O0 v$ @ {
; x: I' O1 T. Q: e6 { .active_low = 0,) v5 u, I F# R% m: V
.gpio = DA850_USER_LED0,
$ `2 [2 N5 q0 N, D .name = "user_led0",
& M0 [- e! h, I" D' I4 q .default_trigger = "default-on",8 a4 p8 J, J. U( d
}, m9 N% s% ]( t0 q J" g2 W
{/ T& i2 v3 ?1 [, w5 t) R
.active_low = 0,
" d+ x0 u6 C! P, F9 L4 X9 R$ X$ n .gpio = DA850_USER_LED1,
; D+ E& c" E$ T7 w0 i$ z4 l, T .name = "user_led1",
5 x$ Y2 z1 `! P, z+ O; E5 O .default_trigger = "default-on",
4 H0 l6 ^* t' {& h# t& Z( c },5 }. a- h8 e6 v0 S
{
! h- F3 o1 i( _$ I .active_low = 0,' O$ n# Q( p# {9 C+ E# W
.gpio = DA850_USER_LED2,# r; m) B- O/ Z5 y0 R) {
.name = "user_led2",/ N+ T; y+ [. O7 |, }" x5 [% N
.default_trigger = "default-on",( s5 Q- a4 u7 X9 C) R
},
1 H( ` S& x3 A* [3 Q5 g {
& m0 N/ j7 z* R5 f% D0 x1 r. @ .active_low = 0, u7 U3 n, N- Z5 }: l# B6 T0 L
.gpio = DA850_USER_LED3,
1 e, ], D# [9 I2 x# i .name = "user_led3",% Q" a4 d: M3 q+ @0 B
.default_trigger = "default-on",* v. }. x7 T6 o3 G' K3 G8 r p0 F
},- L7 N8 i1 x, p( S
};
0 s# S, L' U( T+ V( h- s
% e, ]# @; N; `8 H' N o1 Vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' X* F3 f, l/ ^; D
.leds = da850_evm_tl_leds,
- |) f6 D% q+ r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: S* t- M6 `2 b3 p2 n6 j
};
8 ^3 l+ K5 z+ q2 C0 R3 I
1 U2 D# ~- v$ I2 t& Q, U; ?6 k. U/ {static void led_dev_release(struct device *dev)4 f# p; m2 ^* U( y
{
: U2 ` P6 _1 d$ R: {: H: H};
+ i! U7 f( f# G9 J; i! h9 U3 I' \4 p5 `* p3 Q8 D+ n) f9 N
static struct platform_device da850_evm_tl_leds_device = {
% j) Q5 ~( {+ Z, n( I .name = "leds-gpio",+ {$ p7 M2 X" v8 V# M/ u
.id = 1,( M% X( A( ~! @/ c- T
.dev = {6 _; ]6 o( n5 \1 v( u
.platform_data = &da850_evm_tl_leds_pdata,
+ N" k% A& p# ]/ T% | .release = led_dev_release,$ Z, |5 s1 Y) n' x: L9 m" H
}
3 l B$ g5 T2 U4 p, r};
6 `2 f2 G+ x/ K/ C! j* X9 |$ I- x
6 E8 [$ n, c1 O Sstatic int __init led_platform_init(void)
; L( o) h7 g1 }& ]{+ A V0 L1 c/ u: @& B0 d
int ret;
) K# D4 I$ A4 n8 B1 |/ ]#if 0
1 m/ Z9 ]9 h- Y/ T5 c M8 w4 z; c ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 A+ @: M' }5 \; u
if (ret)& o% z/ K+ `- S: G$ Z3 M
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": a; }4 [, ~) v: s9 i7 X: ] ~" O
"%d\n", ret);$ D% f& O* W* {* X2 }! P4 ^8 D/ A, j
#endif5 r4 L0 M* u S9 C! M7 ?
ret = platform_device_register(&da850_evm_tl_leds_device);1 K, M) V* a% Q
if (ret)0 O; T6 j+ o1 Y! z" t5 K
pr_warning("Could not register som GPIO expander LEDS");
) S5 h8 A5 o2 x) K( j! k* ` else
! H# f5 a/ U$ W* D* h" W! @ printk(KERN_INFO "LED register sucessful!\n");3 Q6 U" T5 ]4 [: c% z, n& a& v! v2 [
- s0 b Y4 n5 t( @6 U+ V return ret;
8 P; L, z! m L3 b}! S y' h: d: {0 d# n* G \
$ ]! N* I& s( M" Ystatic void __exit led_platform_exit(void)3 y, w0 _2 C, v3 a7 v
{
) K$ X5 @, O% } d7 E+ u platform_device_unregister(&da850_evm_tl_leds_device);
" s ?8 b. Y$ n; W Q; E! N X9 k! {5 t& m$ ?, E$ ]
printk(KERN_INFO "LED unregister!\n");
2 P4 w& \- c) j0 X& @}# m1 z* ]2 t. q3 ]( h
; W8 O# Y: I. U, b- f6 n: h, l7 Vmodule_init(led_platform_init);4 F4 h$ \# x7 R( ^! Z" ?
module_exit(led_platform_exit);
8 c& B& p, ^4 _6 B5 b8 j4 p7 \/ @5 i' _
MODULE_DESCRIPTION("Led platform driver");5 w. r5 A$ D3 z1 t# D1 h9 m
MODULE_AUTHOR("Tronlong");3 R* f) o2 m% Y
MODULE_LICENSE("GPL");2 w1 u& z, z9 d( V5 w$ k8 O+ P' d$ e$ U
3 f2 f9 A9 Q( _4 _6 C. L
|
|