|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 U* k! v' n4 Q#include <linux/init.h>3 f5 ^: V# f& ?* y& Y
#include <linux/module.h>
1 z' O3 D' D( B/ X" z#include <linux/kernel.h>
" J0 V. u# T. N! V0 l#include <linux/types.h>' F( _# \9 L6 N* o
#include <linux/gpio.h>
, E* i2 v+ Z% B j) o#include <linux/leds.h>
0 u7 f6 Q* G8 g#include <linux/platform_device.h>" J( O: p; f8 N
" Z0 o$ l( ^$ T: W& u: R% O" x#include <asm/mach-types.h>9 o6 ~ B1 C/ ]- D+ t! w# N* ]) ^" f. N
#include <asm/mach/arch.h>
+ z1 n' U+ @; A8 `) }* l- ?8 l0 M#include <mach/da8xx.h>
" `8 Z0 u# m) a5 h! T#include <mach/mux.h>: E+ a1 `' L' V$ B" Z: R
3 |/ w0 \1 U3 H0 u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 X+ z& A- Y0 l7 ~: \#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 r5 L% [) h% D3 g3 u#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" Q0 P1 V" u6 S! W2 Y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); U3 l4 o, E: L4 @4 I* m) J8 |6 M- \
# `. [5 j) n) U
/* assign the tl som board LED-GPIOs*/* S) G5 q3 A9 p! g' y
static const short da850_evm_tl_user_led_pins[] = {
; e& _' \8 K$ {7 h, o3 g( p' @ /* These pins are definition at <mach/mux.h> file */9 u5 t3 t2 @0 }% p9 s
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, m8 E; U7 g) u# v( [. ^2 D
-1* i' F5 \+ I5 s, x; d: C/ ^
};
+ Q8 x2 y/ z. ]9 ?
9 @" S; l i$ c# C1 R0 Astatic struct gpio_led da850_evm_tl_leds[] = {+ w. f% V1 A4 W# l- ?* J
{
+ F$ Q1 i, Y0 |) \ k7 x& ^ .active_low = 0,
V! x, a% ~, [3 _, P( A: ^ .gpio = DA850_USER_LED0,. I9 }! W+ v# v( B$ ^7 g1 o1 {
.name = "user_led0",
$ \+ ~3 u& Q) _ s# b6 T" X .default_trigger = "default-on",
' Q+ h! i2 H$ b1 ~5 `* d7 [ },
! p2 D2 P2 @1 ]8 p% o {
2 Z. z2 l9 F% G* g) G+ R .active_low = 0,
" `$ E% U& T* ~- R+ Y+ A2 ? .gpio = DA850_USER_LED1," u( M% Y7 R4 f) ~
.name = "user_led1"," R$ h6 f- S) j) y( J! w4 I0 j1 F
.default_trigger = "default-on",' J. F+ d6 i$ m% U9 i
},0 s; \; n# r3 @8 g2 |0 h4 x, [
{
9 c" c; c1 k8 S .active_low = 0,! y( N4 _3 ~& ?5 L; t* ?" d
.gpio = DA850_USER_LED2,
, \+ V- C& p! l+ i' N) u .name = "user_led2",
; H- k9 R/ [1 O& D6 t/ ~* z .default_trigger = "default-on",0 ^) b( B& W7 z; _. V9 k
},
4 G; x* d* d& T. k# v {
% d1 X$ N& T+ ]- s; P O .active_low = 0,4 y+ U1 Y1 `& P# t, V: z
.gpio = DA850_USER_LED3,) D( a1 O, P& ~* \0 F
.name = "user_led3",
4 B. J- Y- f9 b# u% ]( B* n .default_trigger = "default-on",
" m; s9 ]% O) ]5 H },
; |9 A9 P. @$ m J5 R};- D/ x' y& V! x' h7 H: _
1 R0 U9 _8 B% I% ?" [# V
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% o6 R4 P% E O2 A3 n3 u9 Q .leds = da850_evm_tl_leds,* i" h) F* Z6 d
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),% ^5 J) R3 R7 D* I0 d9 ~
};) Y! p1 v3 y- h* }) Q0 Q
* L; t5 t3 i/ `1 p9 C
static void led_dev_release(struct device *dev)' |* C/ J0 P; h' O! g. f/ C) M
{
* [" `) t- ] g! ]};+ ]- k9 ?4 e3 f+ f" y" I+ X
7 P/ @/ x2 V8 M' p7 T
static struct platform_device da850_evm_tl_leds_device = {
- C1 X) t% J9 g, ]" M# ?! W5 W. n+ @ .name = "leds-gpio",+ }: U1 C2 Y9 s
.id = 1,
! M: c& [# W8 s9 S .dev = {
" M" E) |$ }; y1 X4 P# b .platform_data = &da850_evm_tl_leds_pdata,+ w: ~2 D1 F) [( L% T) M( y
.release = led_dev_release,
3 c0 r1 w/ s3 U2 @/ v. J }6 P) U' i2 g% h* W. L) x" s% S
};
4 m( V7 m# i/ M5 o! Y6 M4 n; l5 f# q+ h& F I! m/ ~6 N
static int __init led_platform_init(void)
. f- i5 z i) f0 L' a0 ~{
5 H5 L( L4 c" _. C! _: [4 c+ n int ret;
" X7 b/ z6 {( a8 c6 K! b: i: f% y#if 0
3 t( D; m$ G7 ]: l, g ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 Q: @9 J% W- u5 h( L
if (ret)
: L# p; r1 L- F/ A9 j S3 C4 H: a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 S8 {5 ]) N% R, S, c+ Q
"%d\n", ret);
Q- s1 o# t z5 }3 f#endif& V! s4 m3 R ^7 L
ret = platform_device_register(&da850_evm_tl_leds_device);# J$ e& s! x' X Z, [
if (ret) ^7 f7 q$ G r. a
pr_warning("Could not register som GPIO expander LEDS");; h; s( U: o4 d3 z4 i5 F. G
else' C" r, @5 {& x& d
printk(KERN_INFO "LED register sucessful!\n");
+ S0 V6 G; D% r9 O* U: {$ ~0 l- j" @5 K! e, f
return ret;
6 h3 S3 o3 S9 U u4 z% @}
0 \: U% q% N( o3 z; M" u6 E
7 ?# q* O/ D* M5 o$ J* C, I! p8 ustatic void __exit led_platform_exit(void)# R% w2 U6 q7 O5 ~
{( \: U& s' m9 {
platform_device_unregister(&da850_evm_tl_leds_device);
+ |# L. w4 [ O n e6 [' H/ P9 {* O7 v0 g
printk(KERN_INFO "LED unregister!\n");
2 L2 j9 M* [1 w3 v; G' z: U}
4 e7 r4 b( T/ r- v0 X% p; z8 G* `- O& x5 W; x" [8 _
module_init(led_platform_init);
! k r7 u" \. ]% H& _2 Jmodule_exit(led_platform_exit);
1 {9 T- p% |: _- E$ ~$ K8 O, k/ t
MODULE_DESCRIPTION("Led platform driver");% A/ |/ f/ O- ]8 X7 [
MODULE_AUTHOR("Tronlong");
$ w& m) Q4 U }# jMODULE_LICENSE("GPL");
! D' b! M- D. }
( U0 j7 ^& }1 P |
|