|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 G/ }1 V" U3 W; y) U4 K5 y#include <linux/init.h>0 E/ |1 |! s+ i9 t% k4 Q4 H+ ~1 A
#include <linux/module.h>" u- _0 y# Y1 i0 A# I) h
#include <linux/kernel.h>- b- Q" @' l* w5 }: s/ ]9 r5 e6 G
#include <linux/types.h>
( F6 K( @* A0 F8 f5 ?" P" ]#include <linux/gpio.h>6 ]4 ~* x ~1 _: w; q
#include <linux/leds.h>
6 J$ [$ ^" k0 }* v) i7 ~#include <linux/platform_device.h>
; h! z! r3 M8 \, A, L( }- I( ]! u/ J7 H3 y: x
#include <asm/mach-types.h>
7 [& {. j- i# x& c1 d' K9 }#include <asm/mach/arch.h>- `- m5 q: [4 K& ~" M4 l
#include <mach/da8xx.h>) z$ F. X2 j$ t, P. B- h i
#include <mach/mux.h>2 u7 W1 h' g5 K0 F
& N3 i+ T6 N9 a& B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) S! P% x% x% @" X5 W: ~
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 s) T! h0 W7 `8 o: Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
p/ E0 w. T) Z0 K( }#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 t' y3 w* Q# W3 W+ z O3 X! H. m: A4 L5 j) w6 W) | m- j- o
/* assign the tl som board LED-GPIOs*/
, Q" `9 j* B; ^; O/ m/ D* F0 G/ tstatic const short da850_evm_tl_user_led_pins[] = {; Q# V& j6 i3 ~, x6 d+ }3 M
/* These pins are definition at <mach/mux.h> file *// v% L! h/ r B5 `
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 v" Q4 G) @) Q1 p$ E4 N) V -1
5 M: M& H8 S3 _2 @};) i8 c! Z. ~" s( _
4 k H% C$ d* L( f4 ?static struct gpio_led da850_evm_tl_leds[] = {! g+ M) E N; V$ z0 S* b: M& |3 ?
{" U$ v, M' W' q( H' T6 U) q
.active_low = 0,
: R( C3 i0 F8 _- U .gpio = DA850_USER_LED0,
! H1 t- l+ T% l9 _, B+ Z .name = "user_led0",
6 `5 a4 Q# r' b, R% } .default_trigger = "default-on",: {% ?2 P$ N- \" @
},9 M( h. U: |1 c
{- @+ M: D8 z7 ~7 O
.active_low = 0,1 u5 u1 B: z( y( k) l9 D8 W" _! \
.gpio = DA850_USER_LED1,1 ?$ x& N! }# j% O1 k) r
.name = "user_led1",
) R0 P5 J% F( ] .default_trigger = "default-on",$ Y: D, `7 a" U$ ~) R
},: N- t! N. F4 h
{9 Y4 [' t% b/ W8 [+ o& H4 Y# L
.active_low = 0,/ n4 R7 o7 X. {3 O1 a" }3 e! Y
.gpio = DA850_USER_LED2,& J* y" k# U) N. N; ^2 x) T8 h
.name = "user_led2",% Z& N8 M2 \# j/ T6 J. l' [; f4 }
.default_trigger = "default-on",
' n$ a. n& B& r. q) e1 k. C7 ^ },/ P& V+ P' }+ i3 P( }' A
{+ z9 c) W5 ]5 s
.active_low = 0,
0 ~4 U( ?; Y h& ~ .gpio = DA850_USER_LED3,
) c$ S3 D5 i7 p: U, z) { .name = "user_led3"," |7 S$ ?# S' [& f
.default_trigger = "default-on",
* l. ^. z; Q# b },
1 [ \7 X" P( L6 ^' W8 P4 f4 q};
- C. E- A4 o" c! h3 W! L( d. @9 M/ W2 H8 e" g7 W9 O2 j7 a x
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 z- I; y" ~3 @; k" L4 M7 U .leds = da850_evm_tl_leds,
" J( {! m8 k, J2 V" G( R .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' }# o& O, r8 _( y! q- ?
};7 x; k* a5 o. @. M) H" f
( N' ^) t3 ~; b% [; h4 \static void led_dev_release(struct device *dev); c' i* y6 ?5 H
{# _0 J% E$ Z" } n% n+ m
};
$ M* k m: B- A* y" c1 s( P- V X9 Z6 Q/ G: u! G
static struct platform_device da850_evm_tl_leds_device = {" _1 G' f+ C# a, y; O
.name = "leds-gpio",
, s/ V2 i( J+ G- |8 P, Q; V .id = 1,
" C5 o) l) k6 r: A* ? k .dev = {
6 M6 s# x( n6 T7 G: A6 l .platform_data = &da850_evm_tl_leds_pdata," K& Q. ~1 `7 X% O! v% R- s( |
.release = led_dev_release,
/ O* l5 k; O% O }0 c) ~7 O! @# ~
};- n" b0 d2 f0 o
" J$ [& e: w. y. c4 |) W* b9 C5 w
static int __init led_platform_init(void)
0 U7 b8 i4 v8 U- j6 H# S) P |6 }1 j& h{
" b+ b7 |7 n$ v% d( p int ret;
5 D9 v4 W* d" P) Y: w' l8 V" b#if 0
: _1 O. w# L: X' s3 B# A' f i( M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ L1 c, G/ u3 X# ] h if (ret)
. Q+ W+ @" x' T( J p4 O! U; ? pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 a( u1 z H, [" G8 e* q
"%d\n", ret);
# A9 [" I) K/ i+ p#endif
% x/ T) R+ z0 E( K ret = platform_device_register(&da850_evm_tl_leds_device);8 S$ z, x; C* E) R( [
if (ret) _# {( B0 ]: p3 F4 `7 x4 n9 w
pr_warning("Could not register som GPIO expander LEDS");
Q4 H4 @% x" e, a5 }. k% j else
! T! H+ [4 T( R printk(KERN_INFO "LED register sucessful!\n");
: x' T; [6 Q" n" C: a0 \, n1 i% F
3 |8 R# N: f' A" u, [5 H- s% E return ret;
# A1 N ?4 O" @5 Z}9 t/ d; s- U. M4 ~8 Y# D; M
7 C: r, f' x5 P% Dstatic void __exit led_platform_exit(void)( d- e! W& K/ `! P
{9 ?3 c( t0 Z+ O; B1 ^
platform_device_unregister(&da850_evm_tl_leds_device);
' B/ }$ V6 }3 z3 O P) K! l5 I0 c+ m1 ^: r! d8 m
printk(KERN_INFO "LED unregister!\n");- F& U+ D: m7 ] [: l# P! [
}+ N: ]8 L x" \- u
$ J* i; }+ r2 e1 p' g$ N' a
module_init(led_platform_init);- p" u! q' v* M6 x- q
module_exit(led_platform_exit);
n" |. `1 Z- g/ z. J8 X. w ^/ T/ O( i+ m- x; I" S# Q% b
MODULE_DESCRIPTION("Led platform driver");% [$ z/ s3 u. _% x3 N8 `
MODULE_AUTHOR("Tronlong");' s# ^: G, E3 C( R% Z
MODULE_LICENSE("GPL");
& G! e8 A# H+ ?- M( H8 Z1 Y; z4 |" t, U
|
|