|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 M& e7 K$ [( r( \- l; m* W#include <linux/init.h>
, q' W7 C |' ?% B q# V#include <linux/module.h>9 k- v* z& Q0 Z M+ B( s
#include <linux/kernel.h>
" s/ k' Q; G$ w2 V2 O#include <linux/types.h>
/ `/ f! \6 h4 Z0 X- j#include <linux/gpio.h>
) ~9 ?( {- G0 F ~$ A6 a6 e#include <linux/leds.h>' ^! g1 A: `0 ~3 ?' q3 g' v( ]/ M
#include <linux/platform_device.h>
3 C- s4 d- j. H5 ^0 s+ K* u
" g. u4 `% p u9 P4 K#include <asm/mach-types.h>
1 C5 u. q" x% V* A+ m# n" Y#include <asm/mach/arch.h>
& E7 q, n1 {( I8 Y- x3 z#include <mach/da8xx.h>6 H; G7 L" B- f, ^2 G4 r1 O3 q
#include <mach/mux.h>
0 L0 T& e2 E- @6 R7 x* j; `4 Z7 b# _/ R+ Q+ h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" D# Q3 w6 R) y% x' F% A#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 S* ]5 b& M2 P6 p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, u) u* E& S' @3 t$ y2 \6 E Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" n4 p# ]9 R' p) l- \# C7 f$ `" z. \) Y4 ~3 X ]; f
/* assign the tl som board LED-GPIOs*/; b2 ]. u, N. }
static const short da850_evm_tl_user_led_pins[] = {$ e8 ?, _9 ~% y4 l
/* These pins are definition at <mach/mux.h> file */
0 T5 A/ F9 g- F7 H DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) b5 Z# n) s7 y4 Y3 t6 [ -1) s- M; T; h) b6 V. @
};
d4 I" ~5 n* B& n7 e3 b& I0 s# `" Y4 Q
static struct gpio_led da850_evm_tl_leds[] = {7 d8 Z- U, E! Z/ ^
{
5 i0 V- g( } Y2 a9 r .active_low = 0,% s# H% g' u( O$ [
.gpio = DA850_USER_LED0," g) j6 B ~" L2 U" b9 ?
.name = "user_led0",
, q2 M8 F9 ~5 N .default_trigger = "default-on",; X& b9 n2 ]3 w! r) x8 {7 p' X4 ~6 \
}, T! S* {% c' {' q% w' R
{
5 [9 }- u2 Q. b8 u! P/ Z5 c3 R* d .active_low = 0,
' [5 R0 D7 @) L4 h/ ?9 A( o( W .gpio = DA850_USER_LED1,
7 Y3 x; [. H. Q. k2 C .name = "user_led1",
' R$ K( W" d- j$ k } .default_trigger = "default-on",
6 Z6 [4 J) o- P3 r },3 r+ G8 E8 B/ P, e# x- C
{
& ^! W+ ^+ R6 F5 A .active_low = 0,
. I" `5 a5 q% `6 W& _+ J .gpio = DA850_USER_LED2,: t% o# z3 f: H2 {
.name = "user_led2",
0 W/ Y8 W. y* \- I/ l .default_trigger = "default-on",8 ]/ q* W$ e) V' _9 h5 H# a
},5 c8 ?/ m6 z& w4 A7 o% g0 ]
{
0 J, _6 \2 q9 R9 K6 f .active_low = 0,
4 H7 W4 q1 H0 ]/ j: C' u$ U .gpio = DA850_USER_LED3,
) w: f2 s6 [. {1 _, \+ J .name = "user_led3",& O$ @+ {: w i) x
.default_trigger = "default-on",
0 | r8 Z* v/ {8 v( @' l },
8 F; Y; m6 _( W};, G" L& Q. |* m$ [8 }! \. \( q0 H
8 {! M( I h3 \( E/ S$ |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, ~7 S5 E6 y4 E$ j" k
.leds = da850_evm_tl_leds,. i, ^+ j0 C- ?" B$ M+ l. i
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 P4 r* w0 i2 l, \1 M};. c0 l/ E p& N4 }" z' c+ I" a
$ q+ z3 M. z' T+ o' k
static void led_dev_release(struct device *dev)
) k6 R0 h; V& H6 b+ m' s{
. d: ]; [( w$ T! t1 [! R};' I, i) r h( D- c& c* O
c- n7 d$ H [5 n4 s+ E
static struct platform_device da850_evm_tl_leds_device = {
+ s# n P+ _6 C" s0 _0 w# F& p .name = "leds-gpio",
2 P0 c( z6 q7 l .id = 1,5 y8 _3 {2 }! Q+ B4 u j9 h
.dev = {7 b' @' B8 F H4 t, v
.platform_data = &da850_evm_tl_leds_pdata,
9 j0 Z* ^) U+ Z8 D$ c6 v .release = led_dev_release,! m! H1 |2 Q- a2 U2 T* ?( z
}
. |7 c2 j3 r# h1 B};: E$ m- g" W) C3 _
; ?0 E9 B3 u: a3 x2 Sstatic int __init led_platform_init(void)" O! R( p8 A/ Y" Q B r/ w
{2 V* M9 M- D% r/ B) v X; R6 E& a5 E
int ret;' i+ T& M4 }7 x7 ?7 I
#if 0' L7 Y4 U; R. m1 H, {& G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( W) B" U- o6 S2 d% T if (ret)
& n6 w: Y! c8 i' E H2 W pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; e2 H: {4 I# }0 M" v P "%d\n", ret);* E5 z4 Z: R2 k% s0 [! u: a1 Z' R
#endif9 N9 I z% @+ I8 V: x
ret = platform_device_register(&da850_evm_tl_leds_device);
) D) P8 i: ~; y `" r9 j if (ret)* N+ n" {! ]+ G6 Q
pr_warning("Could not register som GPIO expander LEDS");
! H; N- L$ {1 {" k% p7 v else9 \, d7 h1 r8 X. z, E
printk(KERN_INFO "LED register sucessful!\n");
) j; B v6 c6 ?# `3 f. F) \
8 t: d& Z$ ]$ e7 p8 p" k: h9 S return ret;
% x" A. {3 U# {}
: R( T0 v% @5 u# u# t( U
9 d4 p/ M1 `/ Zstatic void __exit led_platform_exit(void)
9 G& T Z& @. G: x5 J7 y{
7 f; H& O* _2 ~# d platform_device_unregister(&da850_evm_tl_leds_device);
! ^! [! i) _& l6 F" H, v
+ v4 c9 Q0 u M+ ]3 y1 j! T& s+ Z printk(KERN_INFO "LED unregister!\n");
, v0 V1 E& {: {$ J* ]* v5 N7 H}! O+ {$ X/ R2 {$ J. A
! c# R; G7 \' w% R3 G( f" @
module_init(led_platform_init);
. V+ h( L2 z: ?! k* C5 ^) { e$ emodule_exit(led_platform_exit);
) d8 }% Q: V. ^* {
2 f3 i0 [& s. L- ]; NMODULE_DESCRIPTION("Led platform driver");
: |2 Y1 ~4 x9 G* q+ W$ [- `' e5 mMODULE_AUTHOR("Tronlong");
- @. d- d$ d$ ~& L& KMODULE_LICENSE("GPL");
+ ~) v6 u0 G' X- ~# s1 K8 F2 s1 y" J, t5 w" d( {6 W% }
|
|