|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, Z+ i$ ?4 p. D! t. u/ f% }4 Q
#include <linux/init.h>/ g: U2 @5 x# z
#include <linux/module.h>3 |: L" {9 u+ \! l
#include <linux/kernel.h>; C" R- \+ c9 }6 G$ q# d* n5 s
#include <linux/types.h>
$ ^* r' Z R/ k% {& W2 _& o! _5 z#include <linux/gpio.h>: c* H! |5 J& |- W1 ~% z7 ?
#include <linux/leds.h>6 R" `6 E/ k, C3 V2 S/ N
#include <linux/platform_device.h>
9 _ r9 ~9 K" ~( U& x# z4 K& h1 u' k' X4 f9 v0 A
#include <asm/mach-types.h>
+ D5 {, X5 ?% n o8 z#include <asm/mach/arch.h>
4 x, Z7 x1 l0 j; x$ g1 y5 E9 b5 H#include <mach/da8xx.h> x: ?! ^9 U W' o/ l9 L: E9 F
#include <mach/mux.h>
! M. V/ K6 ]$ x1 k( t- G
) ?" R% _6 o) V! |2 F2 V6 P) v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 z0 z8 s! P* r- P
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 L9 y' J# q4 D9 v* J- Y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ E A M0 {3 ~2 R8 \ n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- J) j8 L6 e! H0 Q* v
: {% r6 b- N5 z5 B% P, u: a! m: @/* assign the tl som board LED-GPIOs*/
* w2 Z3 x5 t* m* P# u: b% Nstatic const short da850_evm_tl_user_led_pins[] = { \! ~& v2 D+ ^7 J6 ~- e
/* These pins are definition at <mach/mux.h> file */) I8 F/ F4 j$ F' m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 f" f8 J1 x5 Q- V
-1" K( V4 p% s0 j5 d6 L: g J
};
. V$ t6 y$ I4 G, q; n% B" `- U3 u; r: y8 j( l
static struct gpio_led da850_evm_tl_leds[] = {8 f2 x7 c) a& ]$ g
{
1 [. _8 W% o N/ f' g .active_low = 0,( x9 C3 g3 c2 w$ w$ f( s( \
.gpio = DA850_USER_LED0,1 L" |0 ]- d3 L
.name = "user_led0",$ B' x' g j% H1 I% b7 v/ \
.default_trigger = "default-on"," W# [6 |9 n. S- E+ c
},2 u1 {3 Z% f' z' O! B; o
{% e# C! U3 g2 z9 \6 [/ E* |; k
.active_low = 0,; }( L" _' E% b
.gpio = DA850_USER_LED1,* ~6 {$ D% r" A
.name = "user_led1",* D5 C Y/ `" A7 d9 u+ g- F
.default_trigger = "default-on",* t2 y2 z7 ?4 H' g& ?7 M
},
1 J0 {* I- L# R# e& f8 l {+ n0 g- V* X7 h8 d3 ?- p& \) ~
.active_low = 0,# a! M& G1 b" |5 Y8 T
.gpio = DA850_USER_LED2,( F& N1 u q+ t
.name = "user_led2",1 {, _; m* d S6 K5 X1 X8 Y
.default_trigger = "default-on",/ L( J6 U% Z! W. V
},
0 G o9 D: s! `9 v4 D" B {
$ ]! |* t& D3 t1 Y8 B/ o C0 r .active_low = 0,; V2 b& g* `: u6 i f8 k
.gpio = DA850_USER_LED3,0 g4 y. ?% c$ v* J9 C5 ~
.name = "user_led3",4 e1 v( X% ^5 p( H$ l
.default_trigger = "default-on",
2 y0 h+ l5 S. N. u5 O: V/ a/ E },
6 ^" h/ ]4 s+ G9 P, i* A+ c};7 c! j9 \8 o# U5 u
" }- J& p1 z0 Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 q. D. K& V9 K* P! {+ }
.leds = da850_evm_tl_leds,5 g& @) G3 C5 o4 |" N0 M+ \$ |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),! n) N0 s+ B( J; w1 A& S' D& a# ^
};+ N( Y9 O( [2 _% P1 r5 L. O5 G/ e
) C7 v: R6 \" M; R4 u s2 ~static void led_dev_release(struct device *dev)$ n3 `/ B8 z. F" I
{# n8 l+ v* M+ M
};. f! A! V6 f$ H' G5 ?- w* |
, D4 O4 l. c. U/ e* B astatic struct platform_device da850_evm_tl_leds_device = {& U \7 u& K" R+ Z
.name = "leds-gpio",# {( O" @3 I! Z" Z7 _4 T7 @
.id = 1, m0 v. p, M3 C$ U8 I
.dev = {8 U% P; h0 j+ B
.platform_data = &da850_evm_tl_leds_pdata,6 }6 C. N1 x# u$ V. j! W7 Q
.release = led_dev_release,
: s* \, K, @+ F: F& x) D- Q$ f }; \2 H) N8 D) C0 L+ Y% o3 D
};
3 z* r' d2 { a2 W6 S: k- e: `, _$ x+ C& l: I! o0 I' t( K+ B
static int __init led_platform_init(void)
. ?% e4 c( _7 u, u4 l{" T/ i$ F$ B" O C6 ~# D
int ret;
# M- j! M7 A! a. T2 ~- H. o#if 0; W$ \, l% N7 Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; L7 q9 h7 ]7 L8 b9 U& C" b; U if (ret)/ V$ L0 C8 I/ W* O& D
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 A! c! O: Q- \1 V. |! t
"%d\n", ret);% Q1 p; O$ y- |1 Y
#endif( p J6 ?9 Y, V0 ?
ret = platform_device_register(&da850_evm_tl_leds_device);, Z& Y; V/ x! _. d6 F
if (ret)
$ J y% v, N7 q% u$ m pr_warning("Could not register som GPIO expander LEDS");
) |! M3 N/ g' ?; V, F else
2 H; i3 d4 [+ u" Y+ j printk(KERN_INFO "LED register sucessful!\n");8 ~4 z( P, b* l
3 {, C, k. z; Q& e. k/ o ^ return ret;
) b) N7 N2 v! c i4 _* v; g: Y}3 n |5 N+ k. w% F5 o- \' e5 H
5 g1 b/ T1 a, S$ d: ]' g. A" z
static void __exit led_platform_exit(void)7 C% b' f O: j3 d6 ^! u' ]
{' z. G" V& c: S( e ^. v- W8 }
platform_device_unregister(&da850_evm_tl_leds_device);( U3 J+ j; L W! i# e; z0 q
, }9 a/ C$ u+ l" ^. M& _" e8 e& P% S
printk(KERN_INFO "LED unregister!\n");
3 A w* O4 I/ k7 [/ ?, n( U4 l& i}2 P( q, z7 W! h, a# O6 n) u: B0 Y( I
( j! g% q) q4 y# v; m4 ymodule_init(led_platform_init);- Y2 d [6 {1 Z$ A, V7 @: m9 E
module_exit(led_platform_exit);9 L5 t4 X5 G. a0 l0 j
7 {; Y7 {6 p; E) x/ tMODULE_DESCRIPTION("Led platform driver");& R q2 t% H- N4 n% }) j
MODULE_AUTHOR("Tronlong");
4 S$ u, L7 L( N3 e$ YMODULE_LICENSE("GPL");
2 a3 o5 O9 W9 T9 I3 }) ^2 v) s4 g. }- L& R# q
|
|