|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 A7 S. J1 _ J ~$ z% H6 p3 e( e# o
#include <linux/init.h>
1 X$ b) }- L- @' l3 R2 p' R#include <linux/module.h>5 n& r+ j! i: S4 H
#include <linux/kernel.h>
2 \. f6 P5 h9 G6 j! y" G#include <linux/types.h>
r, c* Y0 T7 [0 g9 \3 Q#include <linux/gpio.h>0 G+ s. o; R8 d; {8 ?
#include <linux/leds.h>
1 [ l8 n& z2 J( H$ t, D. v#include <linux/platform_device.h>
4 T: ?; N+ ]( @5 B
& b3 ^& q/ M7 [, ^4 J#include <asm/mach-types.h>
; P6 q8 }+ s" r, J#include <asm/mach/arch.h>( Z; F% f. j, _( p/ |; h
#include <mach/da8xx.h> G9 L1 |- I2 I* R b2 @- H
#include <mach/mux.h>. k! Y+ n# ~# g- K3 D: N$ c0 a. v1 j
" n0 ?7 E* d: s! v% b#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). E9 \6 V( q3 X/ ?. a* O
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) T) ~) o. a3 L4 t9 H$ f
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): c/ O. N A3 g4 p k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ f+ O" q% R! H0 Q/ f: Q2 R7 C/ v" ^7 Q4 u3 v
/* assign the tl som board LED-GPIOs*/; u% w, K. w; l7 ^6 b G) N) r
static const short da850_evm_tl_user_led_pins[] = {% t* c3 m1 m/ |4 D K8 U3 ^
/* These pins are definition at <mach/mux.h> file */
& ~; ]; c) Q; O" g3 ~. ^4 l DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 U3 h. _6 c3 E7 [) ~' Q& ^
-1
; T0 s0 \9 f# X; N; u};
( A5 ?( d; `0 e% x7 Z
9 w8 b( e) d/ T# G! c2 i; `8 }static struct gpio_led da850_evm_tl_leds[] = {
, Q6 e* J9 j+ x, _- t! Y3 @ { T. f7 X6 K5 w$ s) w F
.active_low = 0,9 b+ T* i# w8 S4 q$ S
.gpio = DA850_USER_LED0,3 x( U+ I! f# [" ^
.name = "user_led0",: _' q5 d% V0 Z% W
.default_trigger = "default-on",# K( F5 C; J- y; J3 `
},( o5 f8 L, {( a2 j! i9 |
{
( H% s0 C: B7 r2 S, _, Z .active_low = 0,
0 S8 X1 G) P. ^: } .gpio = DA850_USER_LED1,1 Y/ W- j7 }. t
.name = "user_led1",4 ^6 L: S( b( y
.default_trigger = "default-on",
6 l9 t6 a# P/ y) ]0 S0 W4 o },0 K$ n. `5 D- Y' U+ N, s Q/ G
{
/ Q" e3 p" P* m6 i' n8 C3 p .active_low = 0, \6 B& U2 M% X8 X9 U, N$ Q
.gpio = DA850_USER_LED2,8 M( I1 n2 J5 r3 r+ B4 [
.name = "user_led2",
# M! Z- P- p. M/ Q$ t' H .default_trigger = "default-on",
% l: R1 e3 i3 K }," g* J6 [5 f! d, y% `$ W" @. u/ p; Y
{
; Z) n" y9 f- N' {; p .active_low = 0,
* H1 q2 c8 j0 k" u. }/ B .gpio = DA850_USER_LED3,
* t% o+ m4 |5 R .name = "user_led3",% Y6 P' w! O% F, J: b/ n
.default_trigger = "default-on",/ d% U5 S( C( Z5 n0 ^( l( l
},0 I$ _* @, q& d' z, h: o3 ~6 v5 H0 o* r
};8 M; ~! y" F+ O
( a' C# O$ r7 u4 N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 K+ f. A4 C+ t6 F .leds = da850_evm_tl_leds,
4 R" T/ }9 V/ S .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: ]" J5 w( n) [: U
};9 n$ r2 g, V( D9 K! ]0 o. M
" L5 `* c6 z/ N5 M% M- ^' h; z2 ostatic void led_dev_release(struct device *dev) G% n8 Q2 T3 e9 b0 ~2 X
{
7 C/ M% m( _5 ]' Z6 x" p! K7 C& ?};
$ r* d# o3 {7 d$ E" N% [: q. k1 P9 F2 b* A0 a7 T2 Y! O" L, k
static struct platform_device da850_evm_tl_leds_device = {
' d. N2 ?8 e" c0 t6 g .name = "leds-gpio",
: T/ J. H* M4 f; F. T0 [1 u6 {8 d .id = 1,! |) I( u5 D& \3 ^( ?% t: ]
.dev = {, g) A1 h) \. E0 u4 F
.platform_data = &da850_evm_tl_leds_pdata,
4 {" a4 B0 v# k+ ]- o! {( t7 t/ z1 ]5 B .release = led_dev_release,
7 A1 o$ ?# F, T/ v2 O1 i }* E/ N' [; b( d6 c: C, ]
};
. d2 [7 x# U& C; X: Z3 J0 q1 M' }+ l s: f3 h# |
static int __init led_platform_init(void)
X- e: E+ Q0 |9 t2 j4 m2 ^4 |& w{3 Z4 @8 r4 }+ e3 X
int ret;
8 e( n) A+ v# V: k/ S+ e) o#if 0
: K8 F0 a' z) G; c ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 q* _/ H( N+ `& Y if (ret)1 h- p0 A8 k, C, z2 `8 i" T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; m O# @& A9 Q& l/ F6 l
"%d\n", ret);
# P) h2 @% V4 @+ O- F1 Y$ O#endif' n: w. ?- R7 K7 D
ret = platform_device_register(&da850_evm_tl_leds_device);
5 [' q, {5 N, _* }5 j3 S if (ret)
4 f z1 P' @. h+ S4 f. D/ L pr_warning("Could not register som GPIO expander LEDS");
6 }6 i Z! p$ G: N& t d* E else/ ^9 e) } a4 q8 @+ g
printk(KERN_INFO "LED register sucessful!\n");1 i& X/ l @1 o8 ~/ F2 p' `
0 H, y& v/ w# Q. Z8 s' a; v7 L
return ret;9 T/ z# m/ J1 e8 N/ A' ?6 Y
}
# `/ t: g' q& e: ^8 A5 a! C& G) Y% q Y2 q! M2 @% U
static void __exit led_platform_exit(void)
0 C3 W4 [# J0 `( V Y, z{( c; T& p. y/ R1 W: W" {0 r; m6 m
platform_device_unregister(&da850_evm_tl_leds_device);
1 v9 H; J B+ ~. W v8 L# P0 r
8 s& Q4 h* V4 O printk(KERN_INFO "LED unregister!\n");
% P. e! E( Q. _1 w7 G2 H w}5 H4 A) ~! U1 y' c
& T+ G7 V" n7 e4 ^: `+ ^
module_init(led_platform_init);
$ E4 Q+ F; {: L" Tmodule_exit(led_platform_exit);
, i8 W. k" n9 m) o* a% Q& k: h! r; J4 c) C
MODULE_DESCRIPTION("Led platform driver");4 Z/ T8 m5 L3 M) A2 s
MODULE_AUTHOR("Tronlong");
+ f% x9 [0 |' a. e+ _MODULE_LICENSE("GPL");
/ \& A# E1 G1 o* Y' z2 L# f* h* K/ t3 Y/ B U3 _" U
|
|