|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ G E6 R4 e( P1 f) Q9 P0 V) ~# y#include <linux/init.h>& k) q+ _+ |+ X# O" e5 |- l
#include <linux/module.h>
( _$ G6 k; d* e% p) F9 i#include <linux/kernel.h>( Y* ?. ?9 i6 f5 C9 _
#include <linux/types.h>3 o7 Z# [7 p: F- M- J: M4 h
#include <linux/gpio.h>
! n) F' g5 E0 B. E4 j9 F#include <linux/leds.h>
# Y( l* ^$ \- z6 |, X8 a#include <linux/platform_device.h>
6 l" U" J' |+ d& G
9 K; {( g/ H Y4 H#include <asm/mach-types.h>: {# Q1 G% K+ M; _* _- i# ?1 z9 Y4 z" s- f
#include <asm/mach/arch.h>
( C% _( Q. B% X9 e5 a7 b8 y7 C#include <mach/da8xx.h>
$ A9 p0 y/ P! \, Q5 o, s9 {# s#include <mach/mux.h>
( _( K, d4 L7 k9 L, m
4 R l+ r6 f* _# T/ S' F! I- M#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' v/ N/ n* h1 E" G4 D
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- V. [- f* ~. L
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- h! c/ J' n3 u4 Q9 O7 D) U
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 f/ f$ T# u% @+ L* @: m
8 |; x2 ]9 M* B1 U; E! X5 p
/* assign the tl som board LED-GPIOs*/6 I8 u1 I; _9 ?# ?2 v& G& K
static const short da850_evm_tl_user_led_pins[] = {# u' j- y0 l4 S* R5 l& j0 w& y
/* These pins are definition at <mach/mux.h> file */
$ p) \1 w6 t, Q; c7 Z# [7 |0 @/ x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) N7 \+ V% D( d6 a8 p4 e
-1
1 |3 p( o2 C! e+ p};
! {8 n, o, g! j, I! ^1 L
( u4 Z5 l3 O, E4 G4 Y; Ystatic struct gpio_led da850_evm_tl_leds[] = {
1 D! ?' ^; P& O( C' w {+ S% s/ A9 H$ c+ R$ Q8 F$ |
.active_low = 0,+ ~& i- e9 v: o, j9 E0 m
.gpio = DA850_USER_LED0,
8 H' q, M+ T0 @+ c .name = "user_led0",( |/ F" z7 O9 t1 t! u* H
.default_trigger = "default-on",
1 {' p" N) B7 f% F7 P- Z3 U },
% J$ M/ \2 l0 x% ^+ [ B {$ S! p: T [8 J
.active_low = 0,+ r# S7 r& c. X9 W! I2 S5 H
.gpio = DA850_USER_LED1,
- O. S) f7 E: y: x. B .name = "user_led1",/ a q! Y3 J4 a+ ~2 p
.default_trigger = "default-on",' ]; w( k8 a* o% Q% Z6 d) \
},
7 T9 C0 k8 J4 V! N! g; c% r {% |+ [2 w: m# D7 P) q. d
.active_low = 0,2 i$ g; \" I4 M) q0 ^# Q
.gpio = DA850_USER_LED2,3 V2 S/ o# n! y% Z
.name = "user_led2",
& Z" t8 n" B' h( z2 S/ G7 H .default_trigger = "default-on",: ^% _- T+ S U$ P
},
' g( I: d/ b' C) |. n. M F' t9 F) D {
& h( f3 b& P1 I" Q+ `: u0 I0 f .active_low = 0,
1 W2 `6 P# B) g) k3 E" e; b .gpio = DA850_USER_LED3,' ^/ t! E: L' T, m- C+ q' B
.name = "user_led3",
8 \+ }0 i8 t8 W1 S4 M) T .default_trigger = "default-on",
9 y" c( x; ^! H z. ~6 p1 x },% d6 t- ^& e$ D7 z& a1 }
};
- o: A( [; S) \4 k3 O
5 Z: ~0 m" ^7 m) Z @" {2 zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 v5 {4 s( y3 [
.leds = da850_evm_tl_leds,! L& G: q1 S) i' e
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" X1 Q; e* C/ h( m1 Z};
% }7 O6 O- ]2 j+ v3 s
; `5 \* ^1 i8 e2 S" ostatic void led_dev_release(struct device *dev)4 @) A6 {8 W. W
{
( H, C! Q4 i8 [};+ U1 ~! f! `! l9 C
9 w/ ^( H( M* p' g5 f3 d
static struct platform_device da850_evm_tl_leds_device = {3 S0 X, d# V& u
.name = "leds-gpio",
* ^* Y1 ]( f0 [ .id = 1,9 P" r Q, A' b) d+ X* o
.dev = {
+ ^2 y" c3 u( r6 N/ x9 v! F .platform_data = &da850_evm_tl_leds_pdata,
; u/ f/ D4 ~, z .release = led_dev_release,
2 q" O* g6 K/ ^( N: ^6 d2 N3 K1 Z }! j2 p& w9 Q T, J8 Y
};) s+ r: G) E6 N" a
]0 b/ C* D1 H2 {static int __init led_platform_init(void)
$ W; P$ Y3 @0 L! M! H{
7 w% S* a, v g2 W int ret;
) x& P' {' A+ _7 Z1 @#if 0
) F$ x; h0 n- c; [ r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- k# M' C3 O: _7 c3 T/ } if (ret)5 |+ @3 B2 I7 G9 w i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
j: W1 W8 S6 S) Y/ N, S& M "%d\n", ret);2 ^5 V% E3 w6 k6 j$ v$ L
#endif! j% f# L% a2 q! h# ?7 q8 w
ret = platform_device_register(&da850_evm_tl_leds_device);* S7 h8 O R3 r+ S* ]8 |7 B3 N, W: }
if (ret)! C8 P9 s! R+ x" K& N
pr_warning("Could not register som GPIO expander LEDS");4 A# {* Y9 \# w! A
else) f& S, W& H1 |- v0 S8 n8 U7 M
printk(KERN_INFO "LED register sucessful!\n");
; ]$ U- E. ]- \8 ~# u
Z: c# ~! x" `, T H& D return ret;
% M0 b! X5 e& x; j( ~& A: J5 a}3 w( a4 @& Z# x: L3 U$ W6 o
: @5 d6 [) Q7 E$ W
static void __exit led_platform_exit(void)) @/ m% \& X/ ~" p
{
" x3 L1 X/ j1 r platform_device_unregister(&da850_evm_tl_leds_device);
. F- D- d% Y) J' e: l6 G p7 P: K" W4 P8 M" X
printk(KERN_INFO "LED unregister!\n");
5 u8 j1 ^: i% J2 j4 V/ |}2 h/ l7 A3 v% s( U5 H
7 @5 [# R1 V8 ~ |: t' hmodule_init(led_platform_init);% _+ \0 k5 [7 B# I6 z' ]- e
module_exit(led_platform_exit);$ Z. V1 }4 `# d. r
! o. X- Z. o" i( m. g
MODULE_DESCRIPTION("Led platform driver");
+ |. `. |. V HMODULE_AUTHOR("Tronlong");: x# b5 ^6 h- j1 T; J5 m. v
MODULE_LICENSE("GPL");9 a/ }% _& C8 o9 i
! L& J# c( i9 ?- a* Q" j, m
|
|