|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 k7 a7 H; A4 K0 p2 ]9 y
#include <linux/init.h>
' U# n& T% G; O# c2 B5 Y" a, H2 e) f#include <linux/module.h>
& _+ ?1 L# q8 o( a5 y- L#include <linux/kernel.h>
% }5 w3 _! j3 z6 P* p8 n6 o! {#include <linux/types.h>
, D9 g* `8 L% |) n m7 m% M#include <linux/gpio.h>
, t x0 Y! m8 N+ E#include <linux/leds.h># b3 ]. X! j& U; y$ E! V! @
#include <linux/platform_device.h>
3 B5 ^3 \; x6 d4 y
% T( ~# [% d, k) m#include <asm/mach-types.h>& W, C5 B- i2 C$ \2 u: D0 H" N# O& O
#include <asm/mach/arch.h>
6 Y- X% _8 R0 K. ~. ^* ^( N! G#include <mach/da8xx.h>
$ ?' d2 Q3 U% B% q. H+ K#include <mach/mux.h>
! \7 {5 M A/ i
3 |9 W7 B( Y! W& y, Q: x+ N- u( s#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 F- o; S+ }+ F5 f9 N7 j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, ?3 w: ^, e* p: R! c E8 a5 O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) C+ l6 G4 N; k3 P& O
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" y" b; z$ X; Y- |" r
3 x7 t- w6 F% H! R+ o/* assign the tl som board LED-GPIOs*/
+ d7 o8 g& w* l* Y$ {+ W' m4 Dstatic const short da850_evm_tl_user_led_pins[] = {0 a/ H) |" Y( [, x# s
/* These pins are definition at <mach/mux.h> file */
% `8 m* w3 B1 Y6 `* B! {9 i DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
n- p( N7 W+ G* |5 P. R9 Y! N -1
: X4 @6 R A; p1 ~5 Y+ Q' x};% t9 B# e; S1 ]$ z0 ]
4 {4 T, M0 u( kstatic struct gpio_led da850_evm_tl_leds[] = {
: E* ]) g1 W1 x. `5 d+ h s2 n" n( e {
2 |6 z4 g6 ^1 G, E1 `! X .active_low = 0,- t; g0 |5 N0 x! F) e) C( M0 l2 `
.gpio = DA850_USER_LED0,
2 t3 h7 O9 r: e" T& @8 [ .name = "user_led0",
8 _8 j- J' T3 B0 b2 F .default_trigger = "default-on",# ^0 g$ C: t* o, i+ i4 g
},
- }$ q, o& R% p+ [) ?& o, Q0 @# { {
! s+ X$ p0 i4 E2 u$ _ .active_low = 0,
" x8 x" p& V% ^5 [) B .gpio = DA850_USER_LED1,
% ?/ d$ {1 B' p5 m .name = "user_led1",8 R9 i( ]- `5 w( C) I8 H: B
.default_trigger = "default-on",8 n7 _) e! P H0 |
},. d2 |' h# r. B/ ]8 D6 U( h- U
{
( d: M6 b/ |5 A( [ .active_low = 0,
& |. x" j8 |/ t' {7 E& x .gpio = DA850_USER_LED2,) I; N7 i3 ?' }$ g
.name = "user_led2",
. W2 s+ [* r/ t4 q; j .default_trigger = "default-on",* _! F0 ]6 |6 R9 V U* W
},
% t& V) a% K* G) G; _7 M h: L {4 L! d' ?1 [) A) h! o( J' N
.active_low = 0,( G, y5 M7 D/ B* ^) I/ R) i; K
.gpio = DA850_USER_LED3,
8 E5 {4 b- y$ s0 p- H .name = "user_led3",! ?7 {8 q% u6 o3 e( ^8 R* ?
.default_trigger = "default-on",
7 {! s7 K! P z$ Y },; h6 v. u! i0 i) G2 @
};
% y* n+ F2 i6 B- V! Q; q
* ^8 O6 a7 l: G7 Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 F% o. E6 G2 y9 R .leds = da850_evm_tl_leds,
, e, M+ f% M+ t: H, A .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ R6 h0 i) k0 _; U/ [};% l. s0 ~4 a% q) V0 Y3 j: \' o
( ?/ i: s+ C. sstatic void led_dev_release(struct device *dev)4 ?6 y% n M( ^; p
{
. J( ]% P$ Z6 i9 a2 u& Y" U* P};
1 k; W) R$ x! m! e3 T0 B
* L& {* x* C6 U' A9 m0 istatic struct platform_device da850_evm_tl_leds_device = {
* ^/ M8 [4 s* y .name = "leds-gpio",
3 T9 E, c5 H( D .id = 1,
' y0 C$ H9 V, \. A9 n$ G .dev = {
6 v! U d' {6 F4 d& z/ M .platform_data = &da850_evm_tl_leds_pdata,# D' D* T3 H9 P% x* X
.release = led_dev_release,0 z3 o/ X2 k3 ~. [ Q1 s
}9 H, Z% A* X$ f
};
& D7 ~' ]( M; B6 f2 L- U- F, Z8 p: ]! l5 R
static int __init led_platform_init(void)
/ h2 `6 {3 e0 x; p. ^{& C/ ~, c# Q4 p U: X2 J5 f+ O
int ret;0 O. w5 v5 _& q7 R8 D2 q8 k* s
#if 0
- ~ J( G; F4 } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: ~( I% D, J' e. n6 H if (ret)0 N' ^- Z; I$ Q/ L2 z' M
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 C& s- H H8 h( S7 C2 k) C$ c* \7 \ "%d\n", ret);
! X6 l& U+ s; ]#endif' l9 a" V+ _+ n% v
ret = platform_device_register(&da850_evm_tl_leds_device);# e* y5 s2 k) x9 Y
if (ret)2 n4 k9 o5 y$ C* o! Q6 p( c1 C
pr_warning("Could not register som GPIO expander LEDS");& B! q( r3 C, C, y! f1 n, B' L7 f
else3 Y* H4 }9 c$ L/ W% U. c
printk(KERN_INFO "LED register sucessful!\n");0 O0 C+ w: D7 U* s0 x
6 o1 V3 F% J; `( Q3 q
return ret;5 x# M8 `8 ?$ T/ E
}
' A) L( o4 i2 Z" l5 t* @9 s) T; _/ \8 g; ]! R
static void __exit led_platform_exit(void)
+ M; b0 O' ~- n! z. K m* W{
; T: [; [& m" p/ }% N7 V platform_device_unregister(&da850_evm_tl_leds_device);. d, r; @, W% Z" s1 y
8 E& V0 @! b( X- J' ]: c1 D printk(KERN_INFO "LED unregister!\n");
h! x0 P: q; D}8 F8 P3 U' i B& C) P) P8 Q
% O+ G, J# r3 L
module_init(led_platform_init);
( K4 v3 B: X" zmodule_exit(led_platform_exit);! Q9 ~. H$ [" [9 J. ~
8 {& p+ O+ ~$ b Z
MODULE_DESCRIPTION("Led platform driver");: z( o0 q7 w! o, h
MODULE_AUTHOR("Tronlong");
, a( F2 @9 v9 u- ^3 P CMODULE_LICENSE("GPL");) y& b; n2 R( u, ~
1 I/ P# ?: u) E9 [. p' `
|
|