|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, x$ i' k$ ? p) F( L* e- a/ ^#include <linux/init.h>* g7 N& r [( \( f; ]4 b
#include <linux/module.h>
) |/ G& m1 f$ J( A#include <linux/kernel.h>5 w4 N, d0 X. m" p7 d" f& f
#include <linux/types.h>- q( _/ O. W0 ~2 Y4 i% R
#include <linux/gpio.h>4 b) u( ~6 a y2 v+ _ Y
#include <linux/leds.h>' y( c& [8 H4 F! z: S) B
#include <linux/platform_device.h>
9 u8 H# y8 P3 O$ _1 `2 h9 V$ a- p$ F9 w$ p4 ]/ _; h6 M, Y6 ^
#include <asm/mach-types.h>
3 ~' C: s+ A! Z8 J#include <asm/mach/arch.h>( [) D6 |$ U- j9 w# h; G
#include <mach/da8xx.h>
( Z# O" e! c3 Z% h1 g, L; j0 V4 X! S0 O#include <mach/mux.h>
" y2 G3 A: c* Z8 {, w! [
7 b' j. B5 s7 O+ R& G% j! X#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' X: F/ P& o5 S* C* E k u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 @( z9 n8 d( C# A0 v5 }, q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) h2 d% c3 |$ X( Z. U( T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) D4 k9 T' L5 f" n1 P1 y
7 S, n7 Q- \/ y6 e. e; ^. a/* assign the tl som board LED-GPIOs*/
6 a7 g$ G% ?& q( C0 E0 N& [" Y0 tstatic const short da850_evm_tl_user_led_pins[] = {
5 f2 l* C- y+ }$ C" I, [; F /* These pins are definition at <mach/mux.h> file */
% J2 }: d# h' l# d/ a* H) i3 ]0 |* ^" M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' W( e* @" u/ A( b
-1
. ~9 {6 H4 v6 z2 F, h};
6 [" o9 j$ P& M, z7 c4 ~3 [# f' M1 g+ Y2 B! Z
static struct gpio_led da850_evm_tl_leds[] = {( h& g8 W( h' n& j
{$ S R% t6 @& b% ~
.active_low = 0,
1 Z$ e3 B& [. f .gpio = DA850_USER_LED0,% T+ @' I1 S) b4 [2 U
.name = "user_led0",
- c' D# P# c" q/ C, D& M .default_trigger = "default-on",
: |) i+ C8 i: v8 y$ c" u( ?6 V( C },5 l, M5 i# U! }# M2 v4 s
{
' Y+ p2 r* Q. X- B' v .active_low = 0,
& @# G0 V* h5 W .gpio = DA850_USER_LED1,9 o# O' R. Q9 [# f# s t
.name = "user_led1",$ B% X- X. j! R! \. k
.default_trigger = "default-on",) n) Q9 {; m* c$ L. _( X1 W
},) b, [: |4 D( Y9 @) Q) `' I
{
) E( G1 k( E4 Z% u9 W+ S .active_low = 0,
7 C6 y; W1 K7 l/ F .gpio = DA850_USER_LED2,4 _4 S# D3 m, h7 O* C% ?# F
.name = "user_led2",% I8 k% |$ J$ Z8 R( s' n/ D8 a7 L0 k
.default_trigger = "default-on",
. }4 N! [! U8 C5 L },
- m( `6 C! L+ @ {0 g& c) |* D, m% N5 R$ K, |
.active_low = 0,
2 F }- B6 L1 C% C8 Z .gpio = DA850_USER_LED3,
- C. G4 U1 Q% I. F( V6 T) a .name = "user_led3",
; E5 R/ Z) i1 x1 r .default_trigger = "default-on",4 N7 H, F) i9 W, b3 {- x
},4 P7 G! O6 Q& b
};& d" F% m3 R' x! n# ?0 E" Z0 A
# w" B* g5 O6 h2 A. kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. S7 T& S0 q! {: Y .leds = da850_evm_tl_leds,8 g% L. o% ?) I# n( j
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. o) z5 F2 K) C};9 Y# T" y( I/ G# o/ K
: Z- x7 { r+ O! r/ x5 a7 kstatic void led_dev_release(struct device *dev) x" p$ o7 V O' D
{, e8 j C2 }9 u' v2 N! v
};3 v4 E2 n W2 j8 G1 W
- b% v( P4 w2 R6 K0 kstatic struct platform_device da850_evm_tl_leds_device = {
7 U/ Q5 z% B! y( U* L" I% b1 C .name = "leds-gpio",
4 z, B) P" c5 M8 J; q. w+ X .id = 1,
0 s h/ \; y! F: E; \& w .dev = {
4 d: g* d+ ?- w& N! \& [ .platform_data = &da850_evm_tl_leds_pdata,
) k* ?$ k, ?. D7 d! {" Y9 |$ I .release = led_dev_release,
% _ h/ T$ T }5 H }
+ P+ b- `: F8 a/ Y7 V};9 k: a, i* a0 C: v. o$ o3 @) N0 a, i
! Z0 p7 L& |) }4 q- J/ a/ m
static int __init led_platform_init(void)2 t/ T( J2 n9 e1 i4 N
{
$ [- [1 b0 I. T3 J1 \+ n3 z1 r7 Z int ret;
- n4 ~9 i* `8 {/ T#if 0; O9 [. M7 X9 U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' u. q5 D% h. ^+ x8 m
if (ret)% x$ m* o6 \2 L) F8 @! J+ ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ a$ U; a6 ?3 W( C
"%d\n", ret);8 @5 B7 x5 E8 I3 P% ]! ?
#endif
3 I ?- O& }& V$ M4 W! |/ L- N ret = platform_device_register(&da850_evm_tl_leds_device);1 g1 I( G2 n, Q" R/ C* Q& x
if (ret)
: V, K9 `1 C$ l% n w" W pr_warning("Could not register som GPIO expander LEDS");/ q: x8 `5 w" T9 r/ c- ^* ?
else9 x! n# u8 }$ u8 ^ V- Y" c7 a
printk(KERN_INFO "LED register sucessful!\n");
4 e7 s- J% q9 d q: O" {" t, _' i6 M/ @, {
return ret;
# }. ?5 o2 ^8 l2 _6 q/ K% R}$ ?6 I! n* g5 i8 a% m- y, D' [
8 p. o, W# L4 _/ _. O5 f% a
static void __exit led_platform_exit(void)
7 V6 x+ v* j: }+ h{& u& @6 ^5 _/ C7 B
platform_device_unregister(&da850_evm_tl_leds_device);1 Z' p- e9 j4 x3 J9 \+ c! e
8 J$ Q/ x4 L/ `7 j: v% t printk(KERN_INFO "LED unregister!\n");9 Y+ q$ l6 p0 j2 ]$ h3 Z, t ?
}7 m+ j& p" G! H1 E; ?1 D
9 E2 n @2 E L' X8 X8 q) M: [module_init(led_platform_init);
! M, f; D/ X% @9 e8 O% F9 D' Ymodule_exit(led_platform_exit);
5 I E: G0 N1 q- _2 E( L' }+ S5 i5 S; [6 u& [
MODULE_DESCRIPTION("Led platform driver");
7 f* e/ o. H( y( kMODULE_AUTHOR("Tronlong");
- T5 V+ _1 Y9 bMODULE_LICENSE("GPL");
B3 ^5 m6 K9 C2 I& r
?9 {8 t# @: D0 A0 { |
|