|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. O) `) q2 U% W; _% @& g1 h; u
#include <linux/init.h>
/ r8 `( _0 J" Z T f$ J#include <linux/module.h>
" q8 Y& [9 U4 Y. Q/ X- g# n4 A: x+ n#include <linux/kernel.h>3 H8 A. Q; \: G" }2 |; A6 p& ]
#include <linux/types.h>
v6 k' {) Z/ b$ [+ E$ ~. @2 Q$ o#include <linux/gpio.h>: w5 ^& ^& H2 R' U0 q5 D3 C- q
#include <linux/leds.h>
% z v' _0 }& l$ s#include <linux/platform_device.h>3 b. ^6 p$ W5 w* H
? \ w% A. {# v#include <asm/mach-types.h>9 X, G2 V' G3 s5 ~+ ^2 l0 w
#include <asm/mach/arch.h>! b$ A) |! q, c, q a4 f9 o1 R
#include <mach/da8xx.h>2 Y: D8 Y2 O( w. ?, j* n w6 u" N
#include <mach/mux.h>
, j j' V5 z" I8 S# V5 ]9 }! M4 [: A4 H. h! W+ B9 ]. W
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), f) A/ D9 t3 F7 v7 o# B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) b7 s# }* B. U7 Z6 c A6 M: v4 A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 O. n2 F, ^. [6 ~ h
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- A7 v) O7 L- ~. ^; t5 ?+ Q2 r8 e$ H, }9 j/ {1 o' e
/* assign the tl som board LED-GPIOs*// Y& k, x- `2 J: l
static const short da850_evm_tl_user_led_pins[] = {
. e+ g# u$ t/ X* Z+ G( c8 ^$ B0 w5 z /* These pins are definition at <mach/mux.h> file */
# Y' \# x7 d$ h8 O4 z2 ~ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ [; p- W: F) Y- K2 A( x! L$ i% | -1
, P# C! s o" |9 Y3 [" q } P) J};4 |4 J+ i* t1 n& V" u$ J; X5 j
2 F0 ^0 {) Y0 Z( O6 pstatic struct gpio_led da850_evm_tl_leds[] = {
" p- ~: {: ?" t0 m. G( @9 D {' b; M! G' ~+ A6 @4 u. t
.active_low = 0,
, F P |$ Z( _ R# `% U .gpio = DA850_USER_LED0,+ @1 s v# M# h. L$ y
.name = "user_led0",9 N* t; M6 x6 G! P
.default_trigger = "default-on",
" @" W; }5 z4 R },. P# @0 u& w& l, G- G$ p
{
# k4 N! X1 O# ^ .active_low = 0,
1 \$ x2 a9 z5 a2 B, t .gpio = DA850_USER_LED1,1 n7 q) a2 T" S, E9 _7 U
.name = "user_led1",
# V, R& H: h! t .default_trigger = "default-on",% s2 t- _& w D5 \! l. }- S" f( P
},
9 z% X- V7 T/ R ~! z {1 G2 U. v! G9 W0 h
.active_low = 0,6 B5 \$ k/ `$ e/ L9 C
.gpio = DA850_USER_LED2,- u# m9 v: h6 u" f/ P- c p
.name = "user_led2",
2 @7 R6 q2 | _( l+ g .default_trigger = "default-on",* J; `0 \ b9 ?) J' R
},; \9 }% `" w3 M) D% j4 r( A
{
7 d+ ?5 ~- K, G/ K .active_low = 0,
! M% }6 p( k8 K .gpio = DA850_USER_LED3,
! ]- v& V; |6 J .name = "user_led3",, N8 }' U% l8 A
.default_trigger = "default-on",% n7 s; P4 S9 O
},
$ G. G9 [1 w" ^ {' ?. _) P( h};
( X+ h3 w7 a( B% l7 |9 j
6 q* _$ O; U+ s3 K/ N' V* kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ \+ ~0 u9 H9 W .leds = da850_evm_tl_leds,6 u; Z* `8 N, {& Q) {2 F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),: I0 u0 q: e4 a) B: w; t
};
, J1 G- A, \& z5 i5 \7 e- E e" p. A; {) m; v: ~ [! o
static void led_dev_release(struct device *dev) k- a' B4 r j% d
{8 |8 h I7 o/ y4 h4 Z( w# u
};
- @0 N4 I7 v" m/ w) M) t* N8 o2 R& C4 L7 I1 `) f9 U3 L
static struct platform_device da850_evm_tl_leds_device = {; |1 F9 C! [" r* e* r1 ]* D
.name = "leds-gpio",
& h2 R7 V. c+ c, Y* b9 o .id = 1,
4 k. s) B) r1 e8 d5 e$ V. J .dev = {, c/ u: c0 s3 |1 q7 h Y4 i
.platform_data = &da850_evm_tl_leds_pdata,
/ b4 S T. T9 N) ^. Q! H .release = led_dev_release,
6 a( ?+ w2 `1 b- g! g ~+ i4 | } [& Y; E& Y8 \5 {! ]7 w5 S9 |; G
};
+ N3 j$ q( s/ f0 T/ ?( D c" D' J3 i, h; `5 A
static int __init led_platform_init(void)' ` W3 Q. f/ N' y. O! \
{
7 d0 r% g) [7 W: d- f) |4 X- Z int ret;/ Z) w1 h* R H; s2 `! s$ e
#if 0) Z. g, t9 `% [) `1 _! m2 z9 k, O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" r$ W1 c6 d5 P4 N! I
if (ret)* ^6 n# \7 N/ G7 k; F, E: ]+ i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
l6 m2 J' M9 F- b9 o" v. c "%d\n", ret);' u v2 M. j$ ?/ C+ [, }6 }1 u
#endif6 o/ i" G* ^) p. `/ Q m
ret = platform_device_register(&da850_evm_tl_leds_device);
8 I+ {% x D# X. Q# S7 K if (ret)
* a/ h7 r% q' T, n, K. b) I; { pr_warning("Could not register som GPIO expander LEDS");
$ D; z1 d1 L1 |% |$ X else$ R; l8 B9 ~: d- A- m* f3 q
printk(KERN_INFO "LED register sucessful!\n");2 c, d* V5 E/ ~; `. I8 v
. Z4 ]6 [! @1 |" p; V8 W; ^" E
return ret;) G: B: _( _+ ?# Y& s
}
; U9 t2 [' \) f, E X- ]) B+ c3 [1 z" Z$ r) s# L) A0 s% k. F z
static void __exit led_platform_exit(void)
+ x# d6 [# [ I6 s5 i3 O( w) @{
3 m, Q" y% G- J' Y platform_device_unregister(&da850_evm_tl_leds_device);$ c! G; y' n2 W5 q+ x
, p0 V, f6 z" M+ x$ w$ J, G printk(KERN_INFO "LED unregister!\n");/ M. P5 ]6 x" n' D
}$ B. q. U) i9 d( U, q
' f3 U7 Q" ^( F! ?8 d( I
module_init(led_platform_init);
5 u; E( o- j1 T; \# Pmodule_exit(led_platform_exit);6 e8 D! h& m8 H' q0 i' i5 s
0 E0 {* }$ K3 T7 f( s; d8 _$ lMODULE_DESCRIPTION("Led platform driver");( v" ]) n ~3 f6 B5 h* [: q3 `
MODULE_AUTHOR("Tronlong");
7 g+ y& d1 H2 R% v# {' J* |MODULE_LICENSE("GPL");( ?: ?- q: K: }/ z8 J8 i+ t
/ m. f. Y7 I' |- z/ J; S3 b
|
|