|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* ~$ O- @+ _& V+ N
#include <linux/init.h>
, `: F2 D# X2 w% w! i, D4 x1 g t#include <linux/module.h>
; K! K3 z# }8 h6 N#include <linux/kernel.h>; t. w4 O9 t' [
#include <linux/types.h>
$ A7 m* ^4 B: i! m, I) m: i+ j/ E+ Q#include <linux/gpio.h>
% q: d C( c. [& q( z#include <linux/leds.h>3 P0 L' V6 |& s! f8 }
#include <linux/platform_device.h>/ j& j0 m1 X8 r2 I
6 }2 ~) j* v) I/ W1 s, O7 X1 r
#include <asm/mach-types.h>3 }( }0 q' N3 A9 g# S O
#include <asm/mach/arch.h>
; q2 c* j& N- v; P$ E- u9 |7 X#include <mach/da8xx.h>
! k3 c6 I6 R5 i. y, z, \" Z#include <mach/mux.h>1 a1 P! I/ V% l2 v& ^
3 D' F, b0 \6 `# l4 g1 p+ L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). F% t8 \0 q7 C+ J! @& H" l
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ H9 t I% A! d$ p# W ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' a# L4 N7 s F+ ~" `, \+ h
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 _% \7 b) a% v6 P. z- W$ ]# `. f& x* d1 ?
/* assign the tl som board LED-GPIOs*/
4 h6 F0 R& M* Pstatic const short da850_evm_tl_user_led_pins[] = {% {( F2 \; { r- X" K8 Z
/* These pins are definition at <mach/mux.h> file */ g* b1 k0 q8 T# G
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 g% m) e5 N5 [; f% X, H
-1
. ^5 Z1 Z5 i6 C2 [/ q3 I% p% r};" U! P k- c% P! C* F w2 K3 b
5 u: ~/ ~& h. Z5 i8 o3 Q$ |static struct gpio_led da850_evm_tl_leds[] = {+ s7 ]$ L+ |6 r% H! n, _0 ~
{1 m$ G2 y- p9 E% E5 B* I- f
.active_low = 0,' h5 |$ t: c& t4 l7 F
.gpio = DA850_USER_LED0,
' n9 b+ z6 d! b8 { .name = "user_led0",
2 h3 C. |+ o6 M" a' d3 D .default_trigger = "default-on",: F* ]& i6 u6 v
},4 U( `$ a) n; B# w
{
! ] l$ G. _" j; P .active_low = 0,9 g9 ]+ x( {0 G0 b+ Y. s5 V
.gpio = DA850_USER_LED1,' N, ~- v% V+ @( |
.name = "user_led1",& }6 G2 l+ J# m/ O1 n# a
.default_trigger = "default-on",
- b! A0 d0 e/ c1 c$ j& @3 c },' @0 `! n9 h) ]% Z9 l0 N' w
{
h! l e: h1 j+ f .active_low = 0,
% L# a9 v- Z8 @" v$ W .gpio = DA850_USER_LED2,- U w" f1 P; a0 @% v" ]
.name = "user_led2",& T5 X; ~; R1 {: H# J( ]+ J
.default_trigger = "default-on",
" ~- q6 ]# F/ ]) n },
0 G+ a) s( N1 S( u/ J" }' A( b9 @ {
% ~; |$ }* w% g0 u! z8 D: e3 e .active_low = 0,
1 L! X) Y' X7 g. m .gpio = DA850_USER_LED3,
# J p9 f) S1 m I+ I8 M5 R* D5 X .name = "user_led3",1 Q9 u$ r& x6 m h+ I
.default_trigger = "default-on",
/ t6 v( p3 I1 w; N, E4 O3 [* m },
" f! j1 M, t% J$ L6 T7 d6 E/ K+ e};
7 Z: Z$ w9 K/ ]- D* D" [9 Q( v+ B$ ^/ H! V; J" b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ _7 Z! J5 v* u' u
.leds = da850_evm_tl_leds,
; X0 J$ ^, T0 [/ b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ r, q% \9 c6 g, ~
};
$ i% o2 z: r2 W; ^8 Y. S3 H7 C& T3 {
static void led_dev_release(struct device *dev)
/ }* ^" X% [9 ^6 j{3 @, {/ H2 m5 z9 q4 O
};
+ r, z. o/ P+ z' q
$ G' ^9 g, i3 a" {9 Q/ m" Sstatic struct platform_device da850_evm_tl_leds_device = {8 m' O9 p, w+ s
.name = "leds-gpio",; F. e$ M& h9 z: v8 r3 `
.id = 1,
5 ?4 p& N# v" p( `. n# q .dev = {8 n) A& o$ X0 A5 m- v4 L1 W% \
.platform_data = &da850_evm_tl_leds_pdata,
$ P* l! {* i+ _; ^8 E .release = led_dev_release,
1 t( J7 B1 Q9 f2 |+ v% n }9 |- K/ I7 M+ H6 c) q9 y
};
2 ?: p, }3 _ A5 a
/ Z! N" h8 c! k. ^; {static int __init led_platform_init(void)! [% J3 k9 [5 Y6 z- u8 U i) T
{: ]6 i# p s" K1 l9 Z- R, ]% q
int ret;5 s% Q) A' R! N. }
#if 06 `9 ~: h- ~2 Y- U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( C$ D( T* C% X$ T- }/ c- p if (ret)
. g4 q' ~. P9 D) W1 S pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) y/ M; E) R* q. v2 D "%d\n", ret);# `* l/ p3 a% u
#endif" n3 V# T" U. T9 A
ret = platform_device_register(&da850_evm_tl_leds_device); {- P, @/ W% y# W f! G7 _
if (ret), x1 \7 E, a5 I7 s' m5 O7 f# d
pr_warning("Could not register som GPIO expander LEDS");2 W1 h# O5 j. i1 G& O7 `/ v% ?$ j
else; C' ]% @- l+ G0 M. f
printk(KERN_INFO "LED register sucessful!\n");; X7 `# Q O9 O6 [" U( Y
# \3 M2 P$ y; n2 M return ret;
A8 F- b1 B/ {, X* y* w- x! F% D# w0 V' E}5 E7 g* D) y% `! R; v0 [
+ F! O. x. N" K% R$ Q/ g. J+ k
static void __exit led_platform_exit(void)
2 k4 b+ ~% q8 d" z. u{* k1 z. J* y5 L0 f( @$ Q3 G
platform_device_unregister(&da850_evm_tl_leds_device);
4 `5 C$ p( U/ Z
- O7 z) ~' x' } M3 z0 R! Z0 U3 L$ z" r printk(KERN_INFO "LED unregister!\n");5 V( x9 j% }, v& n1 C5 h2 |' T
}) A/ Y- Y( h8 H9 z. i! |
4 x j8 W+ ^" i8 ?1 h: P& |module_init(led_platform_init);" Z( n/ p1 M* s9 V5 n
module_exit(led_platform_exit);4 Z$ L3 c6 T" I7 K2 p
% D- R# f% d% v& [4 [) IMODULE_DESCRIPTION("Led platform driver");
: z& F) Y( f& Y# CMODULE_AUTHOR("Tronlong");3 O R7 e- F' W) n7 M6 T
MODULE_LICENSE("GPL");
. I1 l( T6 v7 t( ]1 \
5 Z) `9 O/ D$ w |
|