|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; l( n0 G$ D2 w; C7 D' L& v9 G( [+ r6 Q#include <linux/init.h>$ m5 m8 z7 y! n$ l# x( \
#include <linux/module.h>
5 ]; z4 r. k. o k" N/ H#include <linux/kernel.h>
' y+ A+ N# o" ~# |( O8 [; L- b& K#include <linux/types.h>8 l F2 c! [) z/ c t' `
#include <linux/gpio.h>& j+ g- ]' l5 B+ V: f
#include <linux/leds.h>* s* J3 \# j2 A2 Z# |) w
#include <linux/platform_device.h>
, l; z0 c; I# x7 ~. L" f r: G- a9 I# z; F5 g* Y0 y
#include <asm/mach-types.h>
6 S' c6 U& }0 k+ _9 C. }. F#include <asm/mach/arch.h>* B! r _0 {6 \6 T
#include <mach/da8xx.h>
: o: }, G# @1 u. b( t#include <mach/mux.h>
/ N1 U! `7 \9 o: H
( X. y8 T, `. D- m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 @3 j% h# K) J+ ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) W' W4 P, M. T
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) O- g4 h7 R' U: Z S9 J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 d9 R4 a% v! \- Y r
. J- Z+ D- p# ?; i/* assign the tl som board LED-GPIOs*/0 x2 D5 D3 ]$ H
static const short da850_evm_tl_user_led_pins[] = {* z! Y- p( a2 H
/* These pins are definition at <mach/mux.h> file */
* K" e/ \# z( G DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ i# v# v) j6 w9 O( [ N6 \) M, E -1
( l& R3 z6 L/ Z4 U% \};" Y, ?0 R8 f* E9 u9 A3 F( s+ S& k
1 J4 Q+ M1 D+ x: J; `5 M3 P9 R7 o6 @static struct gpio_led da850_evm_tl_leds[] = {0 O. S, \- C* k" ?/ |, {
{& W) u1 x t2 Q9 s& Z
.active_low = 0,. U+ N# T" y- D9 N' g# @
.gpio = DA850_USER_LED0,# h' i" p$ w# Y2 W$ W8 h
.name = "user_led0",- e, V- u1 H* z& O4 @
.default_trigger = "default-on",
/ ~0 l* ?+ X$ e! S& F3 a. N' e$ j* G* J C },% v6 j, ~1 v4 Z. z( [5 Q/ c
{/ [+ R! l- X8 X; u- a
.active_low = 0,
9 P& P3 o7 D( q- K, v% M Z .gpio = DA850_USER_LED1,3 \. k$ l: x6 V' w+ v+ ~
.name = "user_led1",
9 a$ V$ w' T: U( Y" W3 B .default_trigger = "default-on",
Y! O o- H' N! n },% v ^5 S @. ~. g. a. U" ~+ F
{7 x6 L3 ~2 t9 @
.active_low = 0,1 h' R: s4 |% d0 f5 C' u% d P2 G( l
.gpio = DA850_USER_LED2,
Q( X2 j& b1 \0 d, F) v .name = "user_led2",3 u! n3 r6 Y; r9 a5 r& V
.default_trigger = "default-on",
' U5 x1 [8 A6 f+ ]: z },
) O/ H7 g& i9 Q+ M4 y% }- g {
; Z5 L6 s4 n+ \5 v6 h6 k .active_low = 0,
$ P) _7 p( g" H8 d .gpio = DA850_USER_LED3,& K. {2 I5 e& F3 `3 l. J& o
.name = "user_led3",; h* z0 E1 O- I6 t7 }' p
.default_trigger = "default-on",
' F7 ~+ g4 v! {% y },6 k5 t1 f w3 \
};, z1 D$ R# q; q, d: f
" l5 Q( X( [$ G9 tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 L( F1 d. Z$ Y% b7 E* c4 U4 M( q. |
.leds = da850_evm_tl_leds,
4 J7 J# g8 \7 o* F2 Y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ J* @) \' Z% r. W, F9 ?7 O};' L' d' [- Q$ D5 `/ c
4 U+ Z8 K% O `" E5 |7 C9 _static void led_dev_release(struct device *dev)0 @4 u# }0 a5 e" h6 R& R4 g$ g& D
{1 d4 o+ F1 R$ ~$ [% F
};8 T) K8 o5 \- L
3 o( E! A: Y. m% I b
static struct platform_device da850_evm_tl_leds_device = {
8 }/ O6 |% H4 L% J) O- p .name = "leds-gpio",2 R6 ^# ?* U5 D. P
.id = 1,+ F& z6 S. t4 o% s
.dev = {
1 x' p+ @: a, Q4 }9 O7 R9 M .platform_data = &da850_evm_tl_leds_pdata,
3 _, O6 R {: l0 r# W" S) s .release = led_dev_release,
, T( e5 Z- c e* i4 c1 i, h }( F/ _) p* \# r+ s; T" I7 @: p6 U
};" b6 K6 |, A5 Y* u3 I
2 n% v6 v$ f3 z x8 E
static int __init led_platform_init(void)
5 N* o2 w# _2 y5 F: _ A{0 A& m& z+ M+ B) U' f; P# @
int ret;' n' F# r6 y( b( Y) F: h0 r
#if 0
% g3 ?. d- S( k+ L u4 G, y ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ f8 R2 d' k* V8 {
if (ret). k3 F7 _3 ^2 K1 e3 y4 S; t, l0 p
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- O' _1 L$ l0 v
"%d\n", ret);
% y, V( \6 X* U: {% {#endif( M0 j7 c2 W9 ~
ret = platform_device_register(&da850_evm_tl_leds_device);
$ b0 ]4 d9 n. X- L if (ret)
. b% D8 ?/ g% t/ J& c pr_warning("Could not register som GPIO expander LEDS");
$ C$ y, u$ W9 o# C# b! y8 x else
4 j8 e' y, A7 m3 g* ^+ [ printk(KERN_INFO "LED register sucessful!\n");7 B4 c- p( r9 C
3 z B- n5 N8 U0 ` N7 F9 D; W return ret;
! T% Z( q0 C0 F$ K+ G}, m) H9 n9 v9 q( d2 v
6 S8 v+ o( T' D3 [static void __exit led_platform_exit(void)1 y; j% k5 W1 d2 n. w
{* h$ s' o* o1 T( J/ v9 L1 |1 f
platform_device_unregister(&da850_evm_tl_leds_device);
# M6 |4 H! Z5 R$ U; L% V" ?" x7 M8 E0 D8 S
printk(KERN_INFO "LED unregister!\n");
U: S; L" K2 K; A}6 A ?( v* {6 Q3 O4 z$ h
) W; w- t! @/ n
module_init(led_platform_init);
5 ^3 b" s, w lmodule_exit(led_platform_exit);
& p9 U5 x3 v( @* u( G
A% |. {0 p" Z. E8 W2 I oMODULE_DESCRIPTION("Led platform driver");$ C" b3 v t1 ?; ?0 f) B
MODULE_AUTHOR("Tronlong");
6 q1 s9 d* u% d5 E% [MODULE_LICENSE("GPL");. Q* d' Q; p$ w4 R }
. b% H8 n, Q- X2 m; l% h |
|