|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, C7 F* L: g. i4 D- c7 p
#include <linux/init.h>2 O. I* w; E. m, ?" a5 M0 n# W
#include <linux/module.h>- C" Y* t/ n0 F/ z
#include <linux/kernel.h>$ u( d. z7 E* q
#include <linux/types.h>, M% S1 l A, ^
#include <linux/gpio.h>
$ S+ R& B8 Q( Q/ E: e! I#include <linux/leds.h>
& p$ a' N' D8 Q1 g3 R( B* _#include <linux/platform_device.h>
# L' ^1 f1 _1 O$ U( g+ [$ \3 e9 `- _7 B _4 z6 A0 b
#include <asm/mach-types.h>
7 J( ]' }" l" f. G4 k" q1 Z#include <asm/mach/arch.h>
& A J" X, P2 S! T. ] C" ]#include <mach/da8xx.h>
7 }* j5 ^" m# v c* M" s x! l#include <mach/mux.h> v& i2 n7 H# E
) k L: }% v1 Z+ F {; O$ c0 N#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% T7 a/ a8 K% e1 o3 m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 j; X- l" U4 q% V! ^0 Y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 B8 _* b" }1 S$ c7 v+ n#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: c/ g2 i" B2 ^4 t A
9 V* b& c/ t x/* assign the tl som board LED-GPIOs*/0 s( U2 x4 E! T$ P* W# k1 `
static const short da850_evm_tl_user_led_pins[] = {' k( C4 A1 E4 x1 T8 i7 i6 M
/* These pins are definition at <mach/mux.h> file */
' X3 K( [" M% L9 c6 K- C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 s" }! z4 E& f' w) J
-1
' i" Z% ]9 P: k};
; X% S1 {; o5 f& t2 x
; g/ B, H! o7 c* A: @static struct gpio_led da850_evm_tl_leds[] = {
8 m% n( F) K' i& n+ _- s3 T {
$ o8 {: P7 J% d3 } .active_low = 0,
( Z' r K, o8 {# U" W; V3 h .gpio = DA850_USER_LED0,
' I, }0 h1 K( a, L6 y, W- W& L .name = "user_led0",2 m! R; Z% F1 W1 {' Y
.default_trigger = "default-on",9 P0 w: ^$ F3 z% }
},
* t& V6 m6 `& w* O3 S {
+ b$ g! N$ P, A2 B .active_low = 0,1 V$ v# C @6 ], \8 o- I- G3 B
.gpio = DA850_USER_LED1,
5 ` n* ^7 H3 x8 V; D, J .name = "user_led1",
O- @* k2 r D( f1 Q" h" b .default_trigger = "default-on",
% T6 ?9 }" ]0 ~5 A! N },
" w% [+ w0 Q; U$ B) X" \* X& U {7 ?; o' L4 [7 s; F S' p* a2 o
.active_low = 0,* W$ u1 Y r+ f$ e6 s f
.gpio = DA850_USER_LED2,
! W j( K+ z, A) m .name = "user_led2",
/ |% i @1 L. a0 ?% G .default_trigger = "default-on",6 |3 o; Z8 v3 F7 B
},
0 S5 @6 k$ y7 o3 M1 f% o! U* s {$ _0 ?& `2 L& ~% J. N, c2 ]
.active_low = 0,
! `% n" S; u7 I. t. M' P .gpio = DA850_USER_LED3,0 O, K( z8 [6 w+ E4 X8 h4 T
.name = "user_led3",
6 s/ U8 a% b, j# j) v1 K .default_trigger = "default-on",
" k% o" P: c' g0 Q% g u },; q% W- H' n- {; _# {
};
, z6 t2 d, z' A) G% o. k& m, G% A2 z/ i4 [3 }( G' T9 r9 n
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: f% ]+ o u) F" \! V. j .leds = da850_evm_tl_leds,
: q# F! S" K) p: [ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, X0 o7 S6 w9 m" M' n: E5 |};
3 U, @* t9 j) o; L z. b- W S1 j J; K
static void led_dev_release(struct device *dev)
: M, }& S, z7 {; m4 r# s{
+ y$ q0 m: E4 H0 Q$ K6 x3 N};
1 f7 i* o9 V7 X* w+ \* x$ \
2 p# J/ ?) n x F: Q/ L, Tstatic struct platform_device da850_evm_tl_leds_device = {
8 x( d5 S6 {- m X .name = "leds-gpio",3 m- q6 O' I5 J
.id = 1,/ d0 E, s+ f, A
.dev = {
$ a' Z1 M/ U/ t# B .platform_data = &da850_evm_tl_leds_pdata,/ H& p! i$ S( m
.release = led_dev_release,0 O- M! g5 Z9 L4 o
}
" M" r0 s) K( ]% c7 @/ j6 H};7 \$ p, n* ~5 I N
3 v% S6 d8 F# U, `
static int __init led_platform_init(void)5 ]/ A8 v8 ^" b
{; A$ j& L- I5 r7 b- ]
int ret;+ J. [* {0 r9 _/ }5 g" E1 J
#if 08 z0 |* d+ K: d: L: M! R/ Y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 m9 _; }3 H1 x5 x, A: A* D if (ret)
4 i+ ?7 @8 q0 J pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 @( z0 |8 \3 g2 x1 ]
"%d\n", ret);9 e6 w, w o% e/ e5 H2 V2 y- b
#endif
: v# l1 `' ?( _0 w% D ret = platform_device_register(&da850_evm_tl_leds_device);
$ h2 |% R" a) f9 r7 [7 s- ^ if (ret)
5 r5 N: t5 o: L: T' f pr_warning("Could not register som GPIO expander LEDS");
" _$ l' l3 h8 ?& N8 Q3 w! j else
5 C6 C4 v" n+ S: u+ |) @5 P' b printk(KERN_INFO "LED register sucessful!\n");, }7 C% N, S, I0 Z
4 k3 v; X+ i7 [
return ret;" X4 f7 F/ J+ U9 Y
}
7 x5 [9 o8 J3 h+ ], Q: ?4 C7 z/ K5 g+ x3 b1 L& O l$ n& c
static void __exit led_platform_exit(void)# x z+ n; J* ]% `* \
{
$ u4 c a3 s6 u0 k+ p( } L$ H2 e platform_device_unregister(&da850_evm_tl_leds_device);
) ?3 K+ w; @. C. T3 Y9 ?5 ]! `2 n! J4 W
printk(KERN_INFO "LED unregister!\n");
- \: L Q1 l$ U6 I+ r}1 q. y/ P# V4 w
2 }+ ~) z/ E! c1 d* _; O: z1 H# `
module_init(led_platform_init);0 K* ]! n2 \& ^8 j O
module_exit(led_platform_exit);
; t' F; }8 `- ?, N9 p
$ I+ w' B5 S" e G& ^MODULE_DESCRIPTION("Led platform driver");
- T, f# } F/ \: x- g( k- Y) lMODULE_AUTHOR("Tronlong");2 D3 B6 a) y* v+ ^' K' |9 H R% h/ e/ p
MODULE_LICENSE("GPL");
) }6 e, K' X( F+ O
+ x5 f& j/ F8 f. s |
|