|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 u$ d* P3 r' |1 D# M
#include <linux/init.h>
t0 Z; D' }( D+ A( V6 P7 b#include <linux/module.h>. ]5 A8 f+ e9 T3 o0 |# {; R
#include <linux/kernel.h>
2 M9 c4 f. D7 k( |# A$ ^+ V- D2 l#include <linux/types.h>
. K' ^6 H1 P, {, ]) `- A0 [7 Z#include <linux/gpio.h>: o4 s8 j9 k+ B" t2 ~( D1 p9 f
#include <linux/leds.h>
# e9 [" R% F: U# Q#include <linux/platform_device.h>
- v& z0 j: X' y3 I, O: b9 V9 {" x: {5 f+ U/ ?9 t
#include <asm/mach-types.h> F' H K/ a2 `7 a
#include <asm/mach/arch.h> [' h* f( A. P+ V. r ?) H
#include <mach/da8xx.h>
5 P( ~. M' ~& C3 d9 |#include <mach/mux.h>
. z# w; w- q0 u7 `# ^4 k `9 y
7 Q' W: ]& F- \! U' |2 p0 g! y$ h#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' |# G4 g0 t* K
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ f' z; B" M0 H1 s8 h#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( M0 y& W$ g4 h# ~* ?9 f
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- s- ]- p! I3 k+ R& P/ L" r
/ K' E; v: L6 J3 Z# }7 S/* assign the tl som board LED-GPIOs*/
; x/ i# a7 I- R3 ]2 I3 `static const short da850_evm_tl_user_led_pins[] = {
8 X- u# k) Y- X0 `4 D /* These pins are definition at <mach/mux.h> file */5 \+ E! m8 ?, v4 d; j. t' r& H e
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* y% p4 {4 ]7 z2 c -15 }' m3 q* S; @+ e! R$ ^, |
};
k0 a4 W" {- x" B
( O- J: F- D5 ?/ astatic struct gpio_led da850_evm_tl_leds[] = {
# I8 Y4 l3 [ X" { {) K: U; \+ w$ C4 `4 l& y
.active_low = 0,
d5 f% \$ M x% u .gpio = DA850_USER_LED0,
- V/ h Z% u/ Y, W8 D .name = "user_led0",
$ c$ A1 C6 ?; I& E- T7 [: V# M .default_trigger = "default-on",( W' K, R7 e# @/ K" y: M% W
}," _' L+ T$ g9 J. Y& A5 c
{* |/ S7 Z4 q: x$ m% `1 ]
.active_low = 0,
f' b2 L6 D+ c: d2 R) j .gpio = DA850_USER_LED1,2 ^2 u2 t8 k1 @; k0 M
.name = "user_led1",
+ I" Y5 _ o8 k% C& H( x .default_trigger = "default-on",6 B: W0 c6 n9 {/ f/ e
},
% B# w7 b$ Q: c. e. w; H {4 E, I6 q9 }& t8 q# k. _; r: h
.active_low = 0,
- V: L' R: e% l3 w# u .gpio = DA850_USER_LED2,
# t4 ?: V6 ?6 z .name = "user_led2",
7 M* B+ x( Y# P2 i .default_trigger = "default-on",
8 M* \8 C1 X5 U7 y, j },
" u' P1 s# Z/ R R {
6 H4 ?3 K, @6 o .active_low = 0,
$ t& I# t" k0 s" e$ f# @: H" N .gpio = DA850_USER_LED3,
% W- @4 L* {/ _% v j .name = "user_led3",
2 c1 _% ?3 S( ~/ }; d) }$ i .default_trigger = "default-on",8 S! ~+ {$ l$ M. p0 i& B: W
},! ^3 ?6 H9 i, ?. x5 M
};. d* v/ e# p7 G5 C# s$ L
6 [! P7 v6 g# ^ g" j' pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 Q9 b6 l* ?* H
.leds = da850_evm_tl_leds,
- O: K: X2 M. S4 S .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) y) u% w$ A, y7 \1 E$ s};/ S! @" Q% N# f% b4 A- `
4 N) J! H# G2 V) x- Xstatic void led_dev_release(struct device *dev)9 x( N. x" _# I" N4 ^. N
{
% ^% w0 _& j& o7 X* ]8 E* [6 y};! Z8 K2 V, M. o
- \1 H: {4 m" Hstatic struct platform_device da850_evm_tl_leds_device = {- t/ X+ s6 O* X" s+ `1 N/ ~9 E
.name = "leds-gpio", t- F% t3 b1 ~+ \
.id = 1,3 G) r; C4 B, g, J# u7 N8 D
.dev = {
5 B. r8 ]2 C9 U/ S/ O .platform_data = &da850_evm_tl_leds_pdata,1 w; `& @4 a; }: L. S/ k
.release = led_dev_release,
]0 ]7 h9 b2 P w, d/ W }# {2 I' Z- p; g' Q8 j
};$ D7 C* ^7 @7 d; _# f
6 Q2 x7 P* v) C7 z
static int __init led_platform_init(void)
% Q) `: O6 |4 c% J{2 C) O1 W2 e8 @4 _, `5 b
int ret;
! q. H6 G8 d% }$ }! F" o#if 0) x1 _6 k3 m0 [$ [9 L0 [8 g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ Z% J2 f/ X3 R2 N, C. F" o" @
if (ret)
; u1 Y( l& o# X- o5 R& T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' R2 O9 v& r, U/ W2 T7 n" S+ G$ F
"%d\n", ret);
7 {& x' t5 g3 X4 \/ P#endif
+ L3 Y# j0 B5 r' h# F. D3 T0 j ret = platform_device_register(&da850_evm_tl_leds_device);
( O/ ~3 A/ _% s7 l' M if (ret)
; B+ o# a1 m0 ]) r/ u1 d) t pr_warning("Could not register som GPIO expander LEDS");
' f8 P1 \6 S$ P else
5 S2 Q, N" s, ]( y5 t printk(KERN_INFO "LED register sucessful!\n");% V1 n) L1 h3 c j6 G6 z7 I
* `( B/ l" m5 Y1 K6 w return ret;. w$ v0 u# R8 W0 w, D$ D* w
}+ B0 o! g4 S6 w1 L4 [
4 i( u8 }* b: Q+ o2 K* t; N9 {: {static void __exit led_platform_exit(void)7 N0 _7 a1 w, W5 l: N
{
1 X% [& b0 ?9 b' U/ u platform_device_unregister(&da850_evm_tl_leds_device);
8 j6 H, }5 s+ \8 k+ U$ z8 v
: w0 Q3 q9 e; T" o& | printk(KERN_INFO "LED unregister!\n");
9 x" `/ u0 d/ O1 [4 J}
+ L* p5 m$ y" [5 B; Q9 {) j1 r' s+ t, G
module_init(led_platform_init);
. A- e j: S* c# tmodule_exit(led_platform_exit);% |8 i" t. z% g3 B+ j9 f
9 S+ s% \5 f! ]MODULE_DESCRIPTION("Led platform driver");& q3 m( e9 E# v" N
MODULE_AUTHOR("Tronlong");
; y* M& m! o5 \7 GMODULE_LICENSE("GPL");
$ H! w4 x! U: Q8 ^7 Q2 w3 r
' |0 U7 S7 T3 b |
|