|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 l4 }" t" Z. c! c
#include <linux/init.h>
/ ^& M' ^$ v( J8 T7 e) ~! h A#include <linux/module.h>
0 @/ |1 t% t/ S, E7 a5 v#include <linux/kernel.h>
4 T- ~ P8 t" K& C* E& [# n" o#include <linux/types.h>
! f/ p4 z, u) K4 }0 z#include <linux/gpio.h>
( Z; z% a% C% Z; c#include <linux/leds.h>
7 U _1 _) K2 _5 [7 i7 C- V" Z#include <linux/platform_device.h>
' ]3 y7 ]" U7 k: m, K( @! |) ^# p' K g9 A* n9 o
#include <asm/mach-types.h>
" p( _ U( N; }. k- v$ A a#include <asm/mach/arch.h>- h6 E* Y: L, \/ q I
#include <mach/da8xx.h>' ]5 j/ r6 }% G7 g K8 W* l: c
#include <mach/mux.h>
( K$ `4 J. f0 u6 U" a P* _; {" ?4 M" C) e- b" V: p- `# u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- i3 y+ A! c+ Z& C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 G% l; [" v: V4 L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ h) p) H$ ]/ q2 ~( ]
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
s% T1 x+ \" t
/ c, h$ y1 i' H2 |; Y5 ]/* assign the tl som board LED-GPIOs*/* L" {& }& f' ?, P
static const short da850_evm_tl_user_led_pins[] = {# T8 u; p) l; ]
/* These pins are definition at <mach/mux.h> file */
- H7 C" Z) W/ N6 C4 c# Q# S4 Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ o' S: X! {! M. U1 i
-15 S( n, n& e9 h8 d6 S5 |
};
1 n9 g8 \3 ]/ \ ]4 G1 g0 R2 A
static struct gpio_led da850_evm_tl_leds[] = {
v* L8 [* Z5 \: C6 U/ [! J. v! z7 P {
8 h& F8 R' Q6 q! _- N$ p .active_low = 0,
: F- P4 x% T% ~5 ?7 h/ p% y' G .gpio = DA850_USER_LED0,
+ B& M" d& P3 B9 S# M. J .name = "user_led0",
0 D P+ i6 U5 N2 G; x: Q/ J .default_trigger = "default-on",1 G1 a5 G' b% Z1 w1 m6 @
},
& r; i4 z% u" J+ r0 }2 l {
; f# e) h! u' E8 p, Z8 o .active_low = 0,, F' m. b, h( R5 m
.gpio = DA850_USER_LED1,
9 `( u) q' s' ] .name = "user_led1",
( V: |% t3 J; l* H$ u2 ` .default_trigger = "default-on",# f1 k: W% X$ S" d# Y7 {" n, L
},
* @4 y, e6 H( V {8 [9 }/ I0 j8 `$ w3 P# h
.active_low = 0,5 K5 w2 W* i, H2 F6 y5 P& z' D0 i w
.gpio = DA850_USER_LED2,
, W, U0 p h, X* O( R P4 s .name = "user_led2",0 x# l0 b. b7 ^. A8 h$ A) Y
.default_trigger = "default-on",
9 b' g7 w$ U- C( L) N },0 [/ x0 {* K* q! s- i0 I$ n
{
5 ~* g* D- n3 j; D- g$ h+ ^7 J1 X* ` .active_low = 0,
$ o5 S$ {; x$ g s5 k0 J+ @ .gpio = DA850_USER_LED3,; }/ \. Y" P. y" c
.name = "user_led3",: V3 m W) ~+ F3 G# K0 x
.default_trigger = "default-on",
( l6 b+ {% C& k& J }, K: v. \. ^& v# m; O# O+ u8 Q* {" k' W
};, ~$ R l: Q( x; _) Q/ V F
7 W3 Q+ B$ h( l x; V3 S$ d
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: m4 A4 Y/ y3 Y4 j5 s
.leds = da850_evm_tl_leds,4 {# M3 J) f% W; l0 c" N' }! l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),: s9 F C/ q! v
};9 s- e+ g4 \7 H1 u
3 N7 A" w# n/ `; o
static void led_dev_release(struct device *dev)
9 }, S) j+ i! _9 D' A# N{
1 q1 N$ k) M+ W9 y' y# V};% v0 i7 [: _6 f$ U* \
8 A% B1 u5 V L$ Y4 ^# Astatic struct platform_device da850_evm_tl_leds_device = {
, P( Z& A( N+ b& ]. ?. A .name = "leds-gpio",% ^' G' g, d: @) \' C
.id = 1,
/ U: @/ L7 _4 ^" q+ s# x. [ .dev = {2 B# A4 ^; z J4 N* l
.platform_data = &da850_evm_tl_leds_pdata,3 j% L. u1 ^* L& k! |% e8 H* F
.release = led_dev_release,, E5 l/ C. h: L" w
}# f3 }6 \- D1 b
};6 i1 X# p6 b5 _; @: T/ S! E$ E
8 B+ t& u0 _6 w$ A- s' \1 N# e; ustatic int __init led_platform_init(void)
y) W( S- |9 O" N{
& ~ X( O* z% D" D `0 v int ret;
' S( F- u1 j" N+ h( F#if 0
; M+ o. }/ ~, n% S* Q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' o% v% o0 F. e( q7 O) {8 k# ^) r& x if (ret)- n( ]$ ~. z$ U0 N- S9 j
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- p' I/ n3 s$ S+ C9 J- @9 z
"%d\n", ret);
8 d2 z3 o; C2 u#endif
! I" R/ ]. m' g# q' K$ ]0 \0 A ret = platform_device_register(&da850_evm_tl_leds_device);0 k1 k: r0 |" n* ~8 R" t6 q# O
if (ret)
- r$ P1 }5 x7 U+ L: r0 T pr_warning("Could not register som GPIO expander LEDS");
" B5 |/ x0 p2 N- ^$ A) k else2 M' {3 L8 b% n( \3 L1 Q
printk(KERN_INFO "LED register sucessful!\n");& V# b/ I* a; p, \$ |
" i R% j7 D5 R; t" \- M7 x return ret;
. @8 M1 m6 l; A}
' d$ H! ^% e0 B& H) c
& }# }4 l3 R! s( i/ {$ Istatic void __exit led_platform_exit(void)
/ l2 c: e/ ?( M P# g# o& d{
+ c; }& T/ p% d1 y9 ^ platform_device_unregister(&da850_evm_tl_leds_device);
! |: v D( J( O' g0 {9 j4 v) X" L3 p& U" P% I" v5 ?
printk(KERN_INFO "LED unregister!\n");
" H h# U7 y5 o$ |; Y6 q; a}/ S4 u" @" S) `5 d4 l
) t w$ w. y8 S8 C+ D! z& y
module_init(led_platform_init);9 i$ O; P% p- z! \
module_exit(led_platform_exit);( `. `9 f. }- N7 J9 O
$ t: ^% W; {2 C
MODULE_DESCRIPTION("Led platform driver");
& u9 W6 y( r3 u$ |5 _' W! YMODULE_AUTHOR("Tronlong");7 F3 |% N. R F: @/ A" d+ p) G0 P
MODULE_LICENSE("GPL");
# C2 f1 S/ g1 n/ h; b+ V$ k9 D) c5 l3 `5 |! Q' e6 m) o% [! `' C
|
|