|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' s" k! f+ a1 L# M' m4 \
#include <linux/init.h>
5 }6 P* V$ y$ i' ~6 c#include <linux/module.h>& {# V4 g" ^' A2 ^% [% i* I
#include <linux/kernel.h>
6 b. [& E0 D a/ f5 L, i#include <linux/types.h>- I4 ~: R; A7 l- Y1 O* p v$ J
#include <linux/gpio.h>7 S4 K" `7 p5 G
#include <linux/leds.h>: ]$ x% x* }- S1 R; [: y' {. v
#include <linux/platform_device.h>
: R: l. e2 O9 D/ O# L1 ]) c9 H6 ?
#include <asm/mach-types.h>
" n1 D; I4 ?* a/ ?8 b) T( S8 a#include <asm/mach/arch.h>
" _: K" ~& W( R6 v#include <mach/da8xx.h>8 h8 M: J* L g; J6 E+ w( H, f
#include <mach/mux.h>
3 ]. b8 n, }$ C3 g6 |9 H! V0 ^: {1 w5 E8 h8 g) s: h3 {
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ Q# f [+ p/ l7 S6 a" ^
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 V4 s- ?1 w" F. x6 K4 E" M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 v( F3 ?7 F9 M; V
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' ^4 K; j8 A! Z6 C* x
) M" I5 m' B- C+ W# o [1 r+ a
/* assign the tl som board LED-GPIOs*/; y3 }" X3 m6 b4 N/ J+ G1 l: j
static const short da850_evm_tl_user_led_pins[] = {2 k/ p! ]2 H$ O3 Z2 ] j: \
/* These pins are definition at <mach/mux.h> file */ u& }2 z) B; v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# |) ?2 K$ t5 p6 M. R! I3 y
-1
8 }+ c/ ~% d& g3 E# n, x8 U- ~};6 c/ |9 f3 p9 U0 n- h
/ O& `" ^, l7 o1 F1 a( d* hstatic struct gpio_led da850_evm_tl_leds[] = {+ v, ?0 k, e5 H* z& M' ] o* n
{
4 `& z" Z, p4 [. u" H8 y6 M# x .active_low = 0,% X0 z/ k2 A$ N* ]1 H2 T
.gpio = DA850_USER_LED0," h Z4 v0 H' v7 R5 X1 _* F
.name = "user_led0",0 C6 w8 x2 i; Z$ l8 e+ F. F
.default_trigger = "default-on",
$ n6 S o6 v! l, H },4 {) b* ^" I) u/ L. @, L
{( S; o U( w* ]9 K. W4 o9 p9 |
.active_low = 0,- m" R% n; C R- \/ m* J$ o
.gpio = DA850_USER_LED1,$ s( t# D5 g# g0 h. P; m
.name = "user_led1",
9 J- m$ E9 N/ r1 c1 J5 t- B+ M: G .default_trigger = "default-on",
) G0 s# b" S. b2 ^% d },- ^* j+ u8 n% h% e* ?
{
5 l" U4 P) M9 c9 i4 W7 _/ N5 b) n .active_low = 0,
+ A7 z7 n7 b! }# h" {/ T .gpio = DA850_USER_LED2,( z+ i" w! ` M H& K1 x
.name = "user_led2",
/ V% j7 M% v1 ^- ] .default_trigger = "default-on",
$ a0 ^2 X$ }' d, k0 {- ^( B },
" B. t0 I6 I8 v$ `7 f! g! _& j {
( X! u0 r" m9 }9 ]! t+ |5 W' F .active_low = 0,
' B: ~. B, F8 ` .gpio = DA850_USER_LED3,& S2 ]( L8 X# g% Q4 p, k* K
.name = "user_led3",( z9 {1 O) w/ A2 ~6 C! ]
.default_trigger = "default-on",5 S9 o3 C+ J8 ` i7 V
},
; w3 X8 d, W, v6 h3 y- L};
! P% u& X+ V7 ~, p3 b- Y! L% g1 P& h/ ^9 d0 Q; T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 X1 l( W, b" y5 v3 G
.leds = da850_evm_tl_leds,
3 l& _; K3 ]: W0 t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( [/ |* p; [9 }: E};
$ ~$ b" t* }' D) S8 ]' ~2 o9 x& I P- B- b$ i
static void led_dev_release(struct device *dev)
8 J/ k0 Y: w4 p9 ^+ }( H/ W{
! x; a' r! p! ? L) g4 j, x; A( h6 v};
e$ I( v5 K/ V5 I3 e3 q) w! y* A0 t( W; z& n: |& ^2 A
static struct platform_device da850_evm_tl_leds_device = {
5 d/ W9 d1 W P .name = "leds-gpio",* f* Y: A0 e* W# @
.id = 1,
1 C7 W- J' {# N$ l' @6 C8 C6 I .dev = {1 @9 ?% F& l+ |! J. z# W
.platform_data = &da850_evm_tl_leds_pdata,+ A. X( U- D H( G) W) N- _8 ^) v
.release = led_dev_release,
7 _0 m! U: B8 Y' H) D5 j/ @ }
4 D* u( @& H. P/ ?% W* ^};
! _& A" x% j/ O, u
9 n1 P: k3 k, P. n3 jstatic int __init led_platform_init(void)0 O& p6 v/ U9 h( k
{! i$ \, d% a% F2 P4 @* a. L
int ret;
+ s( g, k7 Y1 }#if 0
. G4 Y0 B. R/ ?# F' M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. L8 x4 o8 F+ ]+ c! ]: U if (ret)! v9 L7 I: B- T6 V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ V! m, _2 l+ `: X "%d\n", ret);
- p# N6 S" w- x1 b# g* H( e; o o#endif5 |. V3 {9 h& ~1 C" Q, j# k
ret = platform_device_register(&da850_evm_tl_leds_device);
" e6 W1 }( Q! v! ` if (ret)) C& |: [* k6 s: i+ T3 g
pr_warning("Could not register som GPIO expander LEDS");
6 x& J6 a7 \0 A9 w$ C" } else5 l1 g0 E: v: P8 ] X, T
printk(KERN_INFO "LED register sucessful!\n");- ^4 r/ M6 V/ w$ U; o2 {2 A
4 z3 O# D- p& {9 f# n. {: O
return ret;
$ Z# `$ ?# Y9 I9 F) B) {}' G5 N( t1 ?7 u# e" |
4 W' z1 e' {( c, x4 d8 Rstatic void __exit led_platform_exit(void); b# l$ {, Z3 K1 P; t E# E
{
& _# E( ~) E- B' e platform_device_unregister(&da850_evm_tl_leds_device);5 ^: h1 x# H' E" H( W7 h7 h# p& k
( ~ P' a5 a3 i8 c3 E, t+ h printk(KERN_INFO "LED unregister!\n");
0 i3 W$ u( y" f0 r/ e}
8 @- h- `& m) @. ^5 X! V! X9 a' Z& d# j8 g( C& r1 [
module_init(led_platform_init);# r% f+ Q: _1 G6 H. X. k5 \% l
module_exit(led_platform_exit);9 X O/ ^/ I }) i1 D
3 K& e0 |2 G0 r& z4 ^
MODULE_DESCRIPTION("Led platform driver");2 e( Q5 c- r* z
MODULE_AUTHOR("Tronlong");8 y/ [0 \7 R% y2 ?4 Q
MODULE_LICENSE("GPL");
/ `4 v# R2 I, n: t6 |6 h$ q8 o8 J$ u# [, a! v3 g. W
|
|