|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ ~3 u: q8 y; R$ J' R8 W( R- {
#include <linux/init.h>
2 T, x! e+ q- F- c ?: y, v- q#include <linux/module.h>
" n9 v% K4 C" o0 R) a2 C) Z0 s#include <linux/kernel.h>- |+ q4 n& u1 i) R
#include <linux/types.h>
; y1 T1 }* |, y& J) m6 `' A#include <linux/gpio.h> f" [) L; ?% Q' M1 [( Z# _5 v
#include <linux/leds.h>) j! n$ p) v/ |7 T
#include <linux/platform_device.h>
: W3 Y6 V8 w& ]9 b5 a% j, ?
2 h8 c; D5 w# I& i5 Y#include <asm/mach-types.h># G* I+ ?4 K: z5 M
#include <asm/mach/arch.h>& D0 G9 `6 c" [( c" f
#include <mach/da8xx.h>0 @! E' E3 y! G# D& B* b* e u
#include <mach/mux.h>
' W7 v O* |; X! {8 d
8 n0 u* D7 n" |/ n+ j( j#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ Q/ z$ Z& Y0 h5 I! Y8 \#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( B& y. b+ c. y5 O# f#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' b! A7 q' l% Q1 m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ H) M9 }2 ~3 q7 @
6 W' h# y: \" t. `4 D! O! Y( a
/* assign the tl som board LED-GPIOs*/
0 M. O% q w# }" ^" A6 K7 X( vstatic const short da850_evm_tl_user_led_pins[] = {
- S0 o8 Y9 f1 q4 E+ A; P( r /* These pins are definition at <mach/mux.h> file */8 W1 w, k" G; A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ t! G/ Y8 |) M' k ^
-1
+ \' Z4 U; N# E' u6 q. _0 v; L};
' n6 d; k( z7 X# A% p
' `! A& W6 s2 B: J' wstatic struct gpio_led da850_evm_tl_leds[] = {
2 o) y$ S7 u/ | {
y' y0 o7 x% l% A5 u, I8 A .active_low = 0,
, W- H+ G! i- D8 O3 } .gpio = DA850_USER_LED0,
" O5 |8 N& ^5 w: j .name = "user_led0",
+ ^! i( @9 u/ C& @! C8 Q .default_trigger = "default-on",
B) X, u7 Y4 C, a* V7 { },
' m' R- k1 Q. _8 s9 O5 \ {- c! N6 t- t; f) Z) o U6 y/ x
.active_low = 0,1 ~- i! S4 m+ B+ d) i9 e, n3 W
.gpio = DA850_USER_LED1,' Z; Z2 l: E8 P8 t
.name = "user_led1",
3 c8 u$ y0 y% {( i .default_trigger = "default-on",* _) V5 ]; N) [+ V
},. s# K- ]9 U: M v
{
* O0 M: y0 K X8 [ .active_low = 0,* Q* ]( Z$ w+ d& Y
.gpio = DA850_USER_LED2,
/ t5 F9 M( V) O( X8 i- S .name = "user_led2",
3 e! c2 d! C+ F2 ? .default_trigger = "default-on",, ~ X2 S+ }% T2 R' n
},# p) k4 o& V$ [
{) A% X' h/ X, T* D# b0 z2 O# s
.active_low = 0,
) j6 ^9 G1 p& ~, W .gpio = DA850_USER_LED3,/ k ^4 m! a3 ~/ a3 v) Y% X
.name = "user_led3",/ ]% l; ^4 U B" h
.default_trigger = "default-on",2 s: h' @ K/ B& o) t0 n& E
},0 S, S3 w! _4 j7 B+ Q v
};
) d7 X) t+ ~) X, I6 U$ A; L7 [$ K5 u8 c' c& ]7 w7 P6 `2 {0 Z3 X7 G
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) X. g- @- a7 p% o) Z9 _- a
.leds = da850_evm_tl_leds,$ X! m |+ L) t
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# f* e7 O3 X/ `; i, `0 t}; T' e) S' y. Z" X, x
5 F8 J( l7 n" I3 M9 I
static void led_dev_release(struct device *dev)6 D1 r' m& W) @
{' N. Z+ ?3 N( o* V) [
};
7 P }( x. G, C2 u6 u4 g% q' o) e
, f( N$ s# y* N) gstatic struct platform_device da850_evm_tl_leds_device = {
% x6 F/ e" i1 s) k .name = "leds-gpio",7 L$ B! W7 {( X. j0 Q
.id = 1,- Y" A5 v# P/ x& B/ B
.dev = {7 p9 `8 s# K+ h# F% i1 R
.platform_data = &da850_evm_tl_leds_pdata,- a* J9 P- [% J
.release = led_dev_release,7 [3 N7 u: o$ ~8 V9 v: L3 m
}
3 Y b6 R& | n) _) g9 y8 T};( Y* k. I9 S8 e4 A7 @
" y1 e/ \" W7 sstatic int __init led_platform_init(void)5 G5 q! H5 |+ X- [, C# P4 C
{; r4 s+ G: g7 j" H
int ret;
$ k( ^9 D# h( z, a#if 0; p2 F9 K# W z& E% B8 y; Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' X. B: B2 Y: z
if (ret)
% O# f2 N$ x5 j( e) n5 e" g% L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 S* l, `8 d i8 B* N0 k* Q "%d\n", ret);/ }# T( h: ~! E- T0 G* V: T" K
#endif# P+ I" O. D9 a5 _4 ]7 d+ ~
ret = platform_device_register(&da850_evm_tl_leds_device);+ u) L8 g9 ]4 w# N" m
if (ret)$ n J ~' s% P- `; C/ x
pr_warning("Could not register som GPIO expander LEDS");/ \- k0 f1 F& E4 l! @, }
else
1 L; i7 w, ]7 K% l# i3 U* N# l3 m1 s printk(KERN_INFO "LED register sucessful!\n");. t" g2 V. O8 _: j) }0 D2 u' K
' v+ m- u1 _; p; ]; Q return ret;; H$ {- V; G6 m2 m8 y
}* \# o/ p0 J( l3 E4 b. F
$ B5 A$ H. v6 L& m5 ?
static void __exit led_platform_exit(void)" u# g% X. s9 I& E5 U$ G" ^
{ V/ n; C8 k8 y/ A" J6 a( Y- t
platform_device_unregister(&da850_evm_tl_leds_device);
8 Q, x; ~6 J5 W3 j4 } K. x
; n. Z5 {' H/ k6 I printk(KERN_INFO "LED unregister!\n");9 i" t8 P: l) q) p2 T
}
, g) i2 u( F7 t( K5 p4 F% [
! F Y) X9 i: I7 K1 J N& T. `module_init(led_platform_init);* g& u( k3 U% o) e9 l7 P- S
module_exit(led_platform_exit);' M, g% P& \% o1 E& |0 t1 o
n% D v$ P$ W0 y4 ^" OMODULE_DESCRIPTION("Led platform driver");% S; g; g. x6 V# w! l5 v
MODULE_AUTHOR("Tronlong");- v4 ?5 S5 H7 e) c% j6 X3 h
MODULE_LICENSE("GPL");) e8 w( s' x4 [0 n8 V& W* r% R
& u4 T: n6 q3 _ |
|