|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 u2 R: { b& \3 }#include <linux/init.h>: W6 S7 l1 g, s0 A3 z
#include <linux/module.h>6 Z+ H( P9 d* `7 z+ s
#include <linux/kernel.h>
0 z! A2 W' ]0 r9 L( o. D5 M#include <linux/types.h>
7 E) u! j+ v1 d. l5 L#include <linux/gpio.h>
( P* {4 }: p& ?" ^#include <linux/leds.h># R& ^% Z B& O+ W& W! ~# @
#include <linux/platform_device.h>
$ m) j- H. I$ P2 G! [: G% `4 {/ {! |& {6 H8 x$ _+ g
#include <asm/mach-types.h>
9 v/ R# Q4 ^$ f6 ~1 u7 l#include <asm/mach/arch.h>, m- q1 Z! i& W
#include <mach/da8xx.h>- G* J4 I7 G7 k+ R
#include <mach/mux.h>' M7 [) b( P9 D( t% ?% N3 [
3 I1 ]+ @& `, S( P7 V2 ~#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 D0 T5 G# m8 D' F7 i
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 t; g" h; V! e; ?, s# U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) N0 s- s; r6 _1 n# Z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: H8 Z; t* |7 a% J: A/ X1 i9 v% b( u6 V/ b* |# U% `
/* assign the tl som board LED-GPIOs*// J; A I/ N! g0 L* Z
static const short da850_evm_tl_user_led_pins[] = {8 R4 z" A/ s) o! X4 k1 Q
/* These pins are definition at <mach/mux.h> file */! H( D! n% j1 _' M8 X3 {$ ]
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; f9 w! \! a, E1 A \# ` -1
8 B8 g( R! I( B, W+ G};6 m$ e, Q9 \5 k' u. V" ~4 s3 Z
: u" }* ]) t+ B" y; p" N& d, Cstatic struct gpio_led da850_evm_tl_leds[] = {
* Z( l. }) r' [9 M) d0 W {
2 q& x; c. ~( h( R: J! q( B$ l .active_low = 0,) ~& u- x- O, |8 j# Y+ J" M9 G
.gpio = DA850_USER_LED0," ~, `' ~$ F* C) ]. j8 R1 Y2 ]5 Y
.name = "user_led0",) ~% y) g+ M. T m
.default_trigger = "default-on",: m# J6 O: e% z* X6 x% T
},
_2 Q L1 _( x! r {4 ]; z _5 S' z, |! N
.active_low = 0,
: ~; n# n: ^- V$ S" l* K .gpio = DA850_USER_LED1,) J% H* D$ ]6 [
.name = "user_led1",
& Y u6 Z. \$ f7 d .default_trigger = "default-on",
7 _. `4 Z5 T% E$ a, B2 y& U },
& |5 `/ H4 Q! y! a5 n1 S/ ~ {, l( Y. j( n: n5 M6 r$ x4 s. ]
.active_low = 0,* D& D! ]! J; H- K( }& y
.gpio = DA850_USER_LED2,
) e3 ~& O: s( d* h5 V) k5 C1 ^ .name = "user_led2",
% m" c3 x! `; R( J3 I" f! B7 O! R .default_trigger = "default-on",! H- T) H3 v/ R2 u+ n9 c
},
9 v1 \) z8 h; n6 n1 d {
4 T0 F* Q. f* _. p4 ] .active_low = 0,' t5 n( b6 X4 B
.gpio = DA850_USER_LED3,' |# O# V; D1 W( T, ^
.name = "user_led3",8 I% X: J9 R- L7 M% u
.default_trigger = "default-on",/ p' Z% \$ d, H8 V. E" F
},$ D# ^* G( m* S3 e& a
};4 a8 N. b( e! u; j( v& F" i
1 [% ]4 \; V$ u3 _: f
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; O% S m' r8 x+ m8 f/ {* X( E .leds = da850_evm_tl_leds,
) @1 q+ { W* P; k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" G3 H( n# ~: e& m};9 k' e/ C- o) D7 c, n& u
/ w- I; e( Z0 o; Y+ [, ostatic void led_dev_release(struct device *dev)8 v% x. r9 U& p# X1 ^
{7 a6 R% G6 P3 @/ x# v1 ]; w
};; y0 s5 I' ]6 I; p- Q. H" [1 |
1 c" w! x! d4 m* H
static struct platform_device da850_evm_tl_leds_device = {' h) T6 q4 T* l- f
.name = "leds-gpio",
4 ^/ {1 X9 X( E( |' l# I .id = 1,% R( S9 C n, l2 ~) J
.dev = {
" Z1 C6 D, E9 M) } .platform_data = &da850_evm_tl_leds_pdata,
/ C3 ~ l! K) G .release = led_dev_release,' l" v% {& o9 W+ o
}2 n T& p2 e( X4 ~- e7 \
};8 f& ^- D3 [) K& r+ J, P9 h
* ^- m) K5 o6 O& I6 l8 y% Q3 Pstatic int __init led_platform_init(void)8 I8 ?- o, j5 G7 X# a: R3 |
{1 Q( d1 ~2 P& c* w9 B
int ret;3 F9 r2 E8 [' y
#if 0! W' U) c* A8 S7 q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 _! P% i r7 s' U2 u0 e
if (ret)
& L# v2 Z! m0 p. D5 K% e4 k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 t* t& G0 P5 j9 k# ~ "%d\n", ret);
$ c [( [' y c$ F& D2 N#endif5 F/ n" M9 r' Z) ]1 W% r! ]4 K: \
ret = platform_device_register(&da850_evm_tl_leds_device);
2 h% B0 v: |" U. \$ X5 l7 w& S/ } if (ret)2 N! @ h/ v8 {$ [& d
pr_warning("Could not register som GPIO expander LEDS");
8 u. U6 q$ e4 P3 w- w( i. R2 b else
% V/ P. l. ^! J9 t5 \! s printk(KERN_INFO "LED register sucessful!\n");) ]3 N, t1 T- e7 B- @
: Z( V# h7 ~+ r5 K3 {* f3 A" m return ret;
; w' A* Z5 u2 x}
8 C% G8 v7 ]& U2 A
: F5 `3 e( z1 w7 t% ustatic void __exit led_platform_exit(void)
1 g' [2 p/ t! A( G. {) {& t$ A9 p* s* \{
: p" }4 i5 t5 u; U platform_device_unregister(&da850_evm_tl_leds_device);: r- H9 o# g9 n/ P3 u: I
`, v2 L' v% G% L) n( x6 N9 y
printk(KERN_INFO "LED unregister!\n");
" T/ I3 ]: l% V) c' J$ r}- U/ E; g. c V4 u3 l
: p, }0 X$ l! d! _& g' b" `7 l7 `module_init(led_platform_init);
4 w3 `5 T4 c! g% A# zmodule_exit(led_platform_exit);; \: m* W$ x# \6 N5 G1 y6 r
/ G# K* F" q5 V9 F/ s
MODULE_DESCRIPTION("Led platform driver");' l0 W; e$ S; U5 e! N
MODULE_AUTHOR("Tronlong");
. A; U3 }+ J0 ZMODULE_LICENSE("GPL");3 @, F* j/ K1 [( q: S6 \
3 w, J, b, c# T% n( p8 Q
|
|