|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ O4 f) l- |' B6 z# a& d9 A#include <linux/init.h>: J9 `8 V& M0 |# C- l
#include <linux/module.h>
3 L2 q, i7 W# E- v( L1 i#include <linux/kernel.h>" e2 U( d9 P7 _! ~6 S0 h+ \1 ^
#include <linux/types.h>2 q* ^: A) Y; i" a, Y3 G$ _
#include <linux/gpio.h>& ^% w4 Q. Y M( T
#include <linux/leds.h>' d, H1 E- A' K+ X+ d
#include <linux/platform_device.h>
! x, g, X% o3 s
, V P- c; c9 t/ b( F) }2 X) `: w#include <asm/mach-types.h>2 G6 }9 x5 R. f) t v
#include <asm/mach/arch.h>
& n; ]# ?5 K! u8 R; E# L! ?#include <mach/da8xx.h>
2 w% [; o& x0 T2 P8 G#include <mach/mux.h>3 s' H& c( u' n3 g2 \
; K1 {) o* w: x/ |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# ]9 r9 t. s4 v( h. F
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# ]) D5 x. C- s$ @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( B2 ?( b" [* F3 L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 P# B, ]. k1 E3 j+ e# f+ j
. f9 Z7 L7 ~: E+ o# W
/* assign the tl som board LED-GPIOs*/
3 l( S+ M, W( c- X) X7 W/ y6 F2 jstatic const short da850_evm_tl_user_led_pins[] = {
. K* |! _- G" _9 c9 d /* These pins are definition at <mach/mux.h> file */
* ^3 S, n) w) U' { DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 v9 Z# y; ~5 `! q
-1
% q8 t9 ^- H& ^) t& }7 m* |};
7 z5 i! C0 j5 z6 U$ F: u+ D0 V( q3 O9 z; c% M% y1 g
static struct gpio_led da850_evm_tl_leds[] = {& a5 v3 ^* t/ Q3 U! P. [5 F
{5 b# Y# h# X, v' f( d* d& H
.active_low = 0,8 r8 V+ F0 k% u7 y7 v6 q
.gpio = DA850_USER_LED0,
8 t$ A+ U- o. m* a: J .name = "user_led0",* _& I' A h, E
.default_trigger = "default-on",
9 E$ x' i. g! A+ @ },
0 f& c. K) ^- ^* u6 K {
* ~: m6 g( W* M% c, h/ N .active_low = 0,7 B- t& u8 l% X3 ^1 ]
.gpio = DA850_USER_LED1,
2 k+ L4 m4 b) h1 B4 K! F: C .name = "user_led1",
+ Y5 ~5 R3 L: Y4 K .default_trigger = "default-on",0 f% b8 A! c: T
},4 d3 ?. W; Y# @( N- Z* d' D
{
0 n( W6 o: M8 c .active_low = 0,1 I0 g$ |$ O0 m; F% ]4 N# T
.gpio = DA850_USER_LED2, |4 T \4 h, x2 b. e7 c$ `. r$ t
.name = "user_led2",
' h0 z9 M# j4 `7 @1 v0 r .default_trigger = "default-on",6 D+ A6 C, r5 W0 N
},
& x, G6 H$ u4 x8 U6 g {$ l( i& b/ \1 A. g
.active_low = 0,8 n2 i8 t( K* s5 g: o" Q
.gpio = DA850_USER_LED3,
. K( B3 z5 |5 X Z7 z .name = "user_led3",
1 p& R, n1 ~" \2 S& N" | .default_trigger = "default-on",
0 u }9 [) o3 D0 Z },4 |6 ?- p3 k# ~5 X% y: B8 X& U9 o& o
};! x7 Y: E! L# ?( F% _4 V
8 }" C* u! \1 n2 K9 H" u0 X( q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 c$ `- z: d6 z1 b
.leds = da850_evm_tl_leds,
" [0 n/ u; k" ]* ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* l2 n6 B; U0 s1 w, u
};' s4 o7 D1 f u( ^; Z4 l
5 p/ @* n& `6 m: q/ Q
static void led_dev_release(struct device *dev)
5 X1 j z. E Z- q- ]{
) e9 M( |% H" H: \4 v};5 ]) k6 n( Y/ a
- i" @- D! n( \0 ]5 f
static struct platform_device da850_evm_tl_leds_device = {
@3 X" O3 w9 E1 t, y .name = "leds-gpio",
9 N0 h+ B; @; L5 t8 [ .id = 1,5 f( ?: `' V I5 r: Y
.dev = {
- t( j! Z7 f6 y" A .platform_data = &da850_evm_tl_leds_pdata,
4 \5 [% S7 o- m- w0 R; y6 b .release = led_dev_release,
4 }* v/ T: I# F6 O1 A I. H) J# A6 E+ w }
* K5 A3 ]: \. i% u7 `};
7 a3 [5 F; a( m2 k" h7 r1 Q/ o$ q8 ~- k) { {, R' I
static int __init led_platform_init(void)
( b) A- T1 a1 L f! T( C, w& R{
) U0 F8 o. t0 b: J/ V int ret;# e3 H* C1 H6 M9 o) `7 v# L+ f: b1 o- Z
#if 01 L6 P7 ]9 r3 u, W8 v' ^& Z" |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( A. q0 ^- x( r* B0 g5 a if (ret)& _( a y) E1 J& k H1 {7 |% f3 P
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% ^. v1 } G9 U# t2 a: [, i
"%d\n", ret);
" T6 c2 U! l$ R) e8 x#endif4 N' J, u+ G3 S5 {4 K: `" a
ret = platform_device_register(&da850_evm_tl_leds_device);6 U( d" a, W8 P- K' u( D/ p
if (ret)
( I5 H* c& c$ x pr_warning("Could not register som GPIO expander LEDS");. F! f2 `- ^2 i8 [7 M9 a
else6 I" k/ t8 F9 |9 d, K/ C7 z
printk(KERN_INFO "LED register sucessful!\n");# N2 a, r& V+ E5 b" n* }' {7 w' D! V
8 P/ R3 O# |1 W; q- \
return ret;
; p- j6 M6 W9 m6 J, C}
2 z# k. m4 _, W; F5 n( t! R! x# u" c5 }% p6 i1 q( q. L& o* @
static void __exit led_platform_exit(void)
n, T8 f7 d& l: @) |) [" \! b{) Z# M6 B; \% U; `9 W7 N2 B3 Y
platform_device_unregister(&da850_evm_tl_leds_device);6 H1 x' u$ H) h6 A, k2 c- M
7 ~" ]7 x, A0 [6 ]! O
printk(KERN_INFO "LED unregister!\n");
3 O4 Z% V1 \( Z1 |" N7 E' z& Z}
1 L2 e: P2 X" K$ L" ]4 U1 C+ d- n) k0 X4 D2 J C9 Y
module_init(led_platform_init);! c. m# ^( b6 o3 J2 w
module_exit(led_platform_exit);
3 X) ?% H* V: P# M
( X+ _% i1 s+ o Q7 v( HMODULE_DESCRIPTION("Led platform driver");. r0 f% J! s/ S! K! B1 O/ _
MODULE_AUTHOR("Tronlong");
7 t2 V0 l9 U) \2 g' sMODULE_LICENSE("GPL");. c# R" q" V7 y$ n4 y ^/ i
. \6 _/ W* D" q7 z& g) Z4 ~" G |
|