|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 t0 v1 d! p0 T* ~( j
#include <linux/init.h>
% z A- i: e& r2 s6 g) R* u#include <linux/module.h>8 c- V7 L) a5 ?, ?$ f
#include <linux/kernel.h>2 @0 P3 ?$ B2 s ^- \9 d
#include <linux/types.h>
7 r$ ]7 `: Y% K. E' [% O; O1 I4 ^#include <linux/gpio.h>
5 U, \; W1 V0 y$ ^ v1 ?#include <linux/leds.h> o4 v3 Z9 u9 R A' x6 ~7 @* b
#include <linux/platform_device.h>& S. h( @3 W0 s2 _3 j: H1 ^4 ?7 l
. L4 c8 e0 |4 y; A+ ~- @#include <asm/mach-types.h>8 X+ C" R$ x; c$ G: @
#include <asm/mach/arch.h>
- O1 e! b, }2 r#include <mach/da8xx.h>9 H7 N7 S3 Z% J+ k9 c( R2 } d
#include <mach/mux.h>9 J7 t7 N H6 s q9 A
u; `8 u/ m) W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) {" A! v+ S5 x$ Y: s) B" W, r
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 H; ~+ J. u- W" j z
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 w! s" \& T! u& \7 @#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ c; g% \- H( P7 \, p8 L c8 ^
; Z- e( @; G/ w/* assign the tl som board LED-GPIOs*/
- M; k3 v* C# B$ `, y' Jstatic const short da850_evm_tl_user_led_pins[] = {$ i2 C# O# q: t7 [( q4 Z
/* These pins are definition at <mach/mux.h> file */
' e4 f- W5 x, t& ^, h2 k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 \" `# b" T. C% y5 q -1
1 n& Z1 [6 ~7 b0 M( Y" o};
+ n8 a/ ^+ U8 P" [2 n7 i' E
7 `" @4 a( Q. [9 Nstatic struct gpio_led da850_evm_tl_leds[] = {7 }% a j: \1 v) J- l0 r
{
3 i) F; X' i0 ^- k1 _! \3 F4 c5 j .active_low = 0,
8 x; B) I3 ]8 J .gpio = DA850_USER_LED0,6 \2 H$ G) ?4 v% `& t
.name = "user_led0",
; s( H9 ^+ Q& s& T* M .default_trigger = "default-on",) ]9 ]7 a! `5 {* d
},
9 [, T6 p/ g( Y: o {3 }) `+ {5 }' S
.active_low = 0,
. \1 O* D' M. x" E' n9 Q .gpio = DA850_USER_LED1,
( {% {+ P% V& K q8 T .name = "user_led1",* g3 l6 Y4 S7 e4 m) ^$ h
.default_trigger = "default-on",
3 z, W! }2 d! C },. C" I0 b+ C8 H% s& p' H) M3 c3 G5 w
{. O5 |7 j( @- Y4 B" C K" ^) A0 C! _4 z
.active_low = 0,( C, u/ R; J5 h: x' ]
.gpio = DA850_USER_LED2,
, x0 k, P. b5 h, a: N( V; A6 s3 t# d .name = "user_led2",9 V+ H0 Y6 f, f" i( C) K
.default_trigger = "default-on",
. M$ e- p4 A9 V: e- n },) Q3 @- \8 [- f Q
{, X2 {/ {6 o; J) d! G5 G
.active_low = 0,
; d3 R; Z+ P& w$ j/ i- j .gpio = DA850_USER_LED3,! ?2 e7 w9 f; y/ I& b' v m; y( |
.name = "user_led3",. t+ i0 ^+ b, x6 o8 M
.default_trigger = "default-on",
5 g1 T( a9 P j$ o$ ?2 z },1 @3 w/ `- ?( ~5 c
};
( |$ |; z1 a7 T7 h+ X" O9 X
. w' v- X; S' ?. Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, ~5 i) _: \' S. I e
.leds = da850_evm_tl_leds,
0 k5 m3 r8 _9 S' D+ x2 T( j .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," Z, w3 o) m4 O2 t2 @; b
};
: k* v2 O8 U1 {* n3 P: u' t6 O& R- X) l7 L/ s( I2 E( N x
static void led_dev_release(struct device *dev)
0 H( W+ I7 W& E{
( q: [1 H6 x- B! a+ I4 `: t7 K% V};
3 q: q6 B$ P' l( I% @5 X; S! A$ {, x9 d2 s! x
static struct platform_device da850_evm_tl_leds_device = {
: s" \" B8 z5 N! ?- |: s" G .name = "leds-gpio",7 S* S6 i2 ~; m- i5 N
.id = 1,9 h1 C# `6 @6 k. M, ?# S* b
.dev = {
2 m7 W5 }: K* k, t0 B" n; f; p .platform_data = &da850_evm_tl_leds_pdata,/ @; u. @: i" Q* ~9 ?8 z
.release = led_dev_release,# G# Y( |& c+ V2 J$ Y& ?
}
. w6 |3 i4 @! k, ^3 K( w7 f};- F7 K' n! B4 N
+ v: \; z" x& O/ m( [$ s
static int __init led_platform_init(void)
& `' ], s/ i5 c: _0 i1 K, b8 M( k/ e{
& N9 U; t; p$ c1 J int ret;
( ^+ F) A3 ~. _1 p2 S2 k3 L#if 0
s$ U E7 a) K8 }5 M, K! q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& D1 X: E [! z$ M) m/ {. c. A- h if (ret)
7 A( f7 a4 k8 A' @: J9 W pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 ]4 O0 l+ s- M8 Y "%d\n", ret);
# h6 P- ] j. X \9 f#endif
! x% M; X6 E4 K0 U) B& b0 | ret = platform_device_register(&da850_evm_tl_leds_device);' ]( Y9 ^/ A i1 {. X0 V
if (ret)
+ I6 _8 x6 H% D2 m pr_warning("Could not register som GPIO expander LEDS");
/ X( @2 W/ n- h8 C6 \ else$ O3 c- M7 ?2 L" ]
printk(KERN_INFO "LED register sucessful!\n");. ^0 k7 @! t1 ~
8 _9 L: {' Y4 s$ b return ret;
" Z6 h- T A. m2 O8 E& }/ ~}
' l4 e2 [9 g# Q$ o5 Y7 ?! G- A
2 r1 c+ `% [4 s! N! m9 i7 z, Vstatic void __exit led_platform_exit(void)
, v# t1 Y$ p' v0 b, J{9 P9 [; i$ Z i4 p
platform_device_unregister(&da850_evm_tl_leds_device);% _! k' p* A7 G6 z
3 A5 F, s2 H: ` printk(KERN_INFO "LED unregister!\n");
& Y; L7 O9 o; R6 i}
. a1 f$ {0 X4 {8 D* Z# i) Q' q6 f; A w% @8 ]
module_init(led_platform_init);
" T1 |$ F. [, T, k+ Y$ ~' nmodule_exit(led_platform_exit);
) w6 r( G+ {& m, [
4 a1 K) ^0 x; BMODULE_DESCRIPTION("Led platform driver");
H5 {" i( m% ^' \* m: tMODULE_AUTHOR("Tronlong");
2 S# x: s. x/ o6 R. z2 K9 hMODULE_LICENSE("GPL");6 r- L9 y! `4 s5 U; G
) W2 P6 D6 j' B7 I. S' X' } |
|