|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( f9 [' _5 j. [6 w#include <linux/init.h>
% Z( {" |5 F+ L& c* d- C5 ~#include <linux/module.h>" B4 _; u. t: V# `( G G/ x9 S* o
#include <linux/kernel.h>3 r! R6 M" a! V$ ^! G. R7 d0 u
#include <linux/types.h>
5 c) Q6 I. u# P( _# C8 |#include <linux/gpio.h>
" X g4 ?! V0 ?) y" W+ {, x3 C1 C5 D#include <linux/leds.h>
) m! G& O( ~2 r- v% |5 H#include <linux/platform_device.h>& n/ R& H# W& Y/ h, G/ i- D/ K8 _
' m' ^0 p: F* ]$ j. q' k
#include <asm/mach-types.h>8 N1 T: C; F+ {! g. ~
#include <asm/mach/arch.h>
$ C5 e5 [: J% K) Y: F; w#include <mach/da8xx.h>2 H. p- k& `. ~" d0 v
#include <mach/mux.h>
7 o! y; p8 `& \% S7 V
1 c5 ]' b* f V#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% I9 E# u/ t/ V. n! K+ _5 X$ M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 I/ k7 p! R+ G% O" i' D3 ^6 z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& o; v- Q; h$ X' y+ R
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' U5 v; J0 ]& I# `+ Y3 N/ Y( M1 o+ `+ p8 _4 }2 }
/* assign the tl som board LED-GPIOs*/
& C N/ r/ i5 r9 ystatic const short da850_evm_tl_user_led_pins[] = {
$ c0 G; d: H3 r9 }2 \ /* These pins are definition at <mach/mux.h> file */
- g- I; l% w* I+ i' J: A DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, T! ^2 {& y& m1 ?4 x# M$ c3 t6 I
-1( z$ ^- z+ {% M; V8 f+ x; {, c
};# F4 A4 N$ U J3 ^) ]
+ N8 Y4 T9 p3 o; ?1 cstatic struct gpio_led da850_evm_tl_leds[] = { F( U& o; v8 H- Q( }5 ^$ U8 W
{/ X9 ~0 u$ H4 L4 E7 o
.active_low = 0,
% M+ q6 Q0 m6 j# I' } .gpio = DA850_USER_LED0,
2 @1 M4 O& B4 Z7 v& q& }, n .name = "user_led0",
( ~! p2 L7 h9 G' K" F+ H- `, Y .default_trigger = "default-on",
+ z9 F% t3 S& a6 Z },
: p% Y- j- t- Q% s& C' ` {
! m3 o& P* C" g! G" f4 {, ?6 w .active_low = 0,
9 O& s3 G' s$ O3 J .gpio = DA850_USER_LED1,
/ H" |" g$ S. S0 [& G .name = "user_led1",
$ N' o7 x8 |# S .default_trigger = "default-on",
8 ]5 g4 U. ^5 m: A },
+ c- }1 g2 K% |$ k: u' V {& m" l& q6 m4 m6 t* W1 a
.active_low = 0,9 _# `8 ]( y/ T+ a% \* R. O; T1 ?
.gpio = DA850_USER_LED2,
4 [8 ~. N- b# ~+ e- t9 ] .name = "user_led2",
1 K5 H/ Q2 [3 T& I% }# ?' S. j* I .default_trigger = "default-on",
# j) L0 C* U% ^; c- l) f# X% z },
1 L! i+ z5 N% {' e9 U' x {
7 D4 l$ Z& d* i- H7 v. O .active_low = 0,
$ D* a# u; r* s) \; F9 c E .gpio = DA850_USER_LED3,
, i( | b; I0 P5 x/ A" o, I .name = "user_led3",
& a% T: [+ k7 N n' ?8 a% Y8 h .default_trigger = "default-on",+ g' u3 e& K' m; K( T/ {8 w
},
% C( m/ g( I. G. m};
0 c0 S' R8 ]& x, \3 K% N6 C% ]/ r, j* t4 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 U5 |* `8 b% |+ ]+ ~
.leds = da850_evm_tl_leds,
4 @( U4 C$ H) X/ I: v( ?; S .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) b4 j+ {1 w; i; j% L$ H3 {: N};
3 C/ f0 S8 A2 q+ m0 A# }2 M3 L8 u
static void led_dev_release(struct device *dev)' G$ E# m/ S+ L, U' U/ h+ P) t7 A
{
- e7 k" g/ f0 j; ~0 J/ p& {$ _* v};
) Z4 z& \; @# J5 F! w G
5 g; s) M9 \6 m3 i" @ [static struct platform_device da850_evm_tl_leds_device = {8 ?8 ]. L! H% S% T5 v, ^2 C
.name = "leds-gpio",
3 [7 `9 _. O( L% l6 _* J .id = 1,
: E7 ~2 ^& B) }8 `0 ~4 X .dev = {# R: z( D8 T2 g8 N3 {
.platform_data = &da850_evm_tl_leds_pdata,* h( }: x; {% G2 [# s! B
.release = led_dev_release,
/ d( u5 h" l u* P4 ~ }, {, a9 }* v' e# \, X- P Z3 x
};* a# f! f; o9 C1 O! ~$ }/ h: n
. w' A3 O3 B: [6 L6 _4 ~static int __init led_platform_init(void)
5 B" Q$ ]6 O c- P3 [{' {2 i) |" z3 k
int ret;5 g+ X; p3 q0 E/ \
#if 0
3 J! R. q/ w2 R. O2 g8 p( Y. K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 u3 l8 t7 v( U# t5 P
if (ret)
8 O* B( c5 }" I8 V( c$ _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* E4 N4 C& H' C* x5 G "%d\n", ret);! a) U# A. M2 u$ {) j
#endif% q2 v* A( C8 R' P2 O4 E2 X
ret = platform_device_register(&da850_evm_tl_leds_device);9 u8 N7 u! I1 F7 g/ B& B& j
if (ret)
* ]* J C6 j0 q$ J! E- F pr_warning("Could not register som GPIO expander LEDS");
6 B$ ?& o7 I0 W0 I: H3 h# D else
- R3 L/ U! W+ ]; A printk(KERN_INFO "LED register sucessful!\n");
4 V6 v! J: ^# l1 n' L. d" F, \& Y9 O5 E/ B+ ~5 M# m8 q6 C
return ret;
7 `% T P3 f# s+ j, i# ~8 g}+ H# j9 J q. p# s- i
5 y( ]0 s. ^8 w* p, qstatic void __exit led_platform_exit(void)
N/ W& i7 p0 v( A8 d' o" Y{: b5 T$ m6 N K" z8 q7 p8 ?* s
platform_device_unregister(&da850_evm_tl_leds_device);
( J, S7 V! e6 H6 D
1 R5 R/ I" s! Z7 v7 L3 s; N2 M# _ printk(KERN_INFO "LED unregister!\n");
8 ~3 e" C* e8 m5 j2 F( p9 Q4 @' F}+ @8 U( j- s$ y
) q( e# ]: [% ^" ^* p* c
module_init(led_platform_init);
* N- G+ C1 |; b( ?( ?5 z& |+ Vmodule_exit(led_platform_exit);
, _# v9 r B/ A9 ?7 ]2 d$ p% D, n6 `& [6 Z1 H- q7 V
MODULE_DESCRIPTION("Led platform driver");
4 K2 Z9 t2 U) w" m, ]/ wMODULE_AUTHOR("Tronlong");' J# H0 }6 y( j
MODULE_LICENSE("GPL");
9 {' Q$ g9 p3 _2 q+ J
, q7 O$ q3 J3 |( L |
|