|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 `+ {% q( Q2 E& h6 V
#include <linux/init.h>+ A, E) R, P9 H- f# C
#include <linux/module.h>
% | ?2 v! H' C8 O! _#include <linux/kernel.h>; ?+ [" K$ F2 X2 G, s
#include <linux/types.h>
9 f! x/ ^! }! l#include <linux/gpio.h>( S. V& p8 Y, i. u# x# o
#include <linux/leds.h>
7 {, `; l4 z$ g2 J/ k0 `#include <linux/platform_device.h>$ z2 f$ C) @) {9 @9 ~$ Q5 T
{3 d2 Y$ m( p; V
#include <asm/mach-types.h>
# t5 \- D8 i$ ~# S% d L9 v#include <asm/mach/arch.h>
2 n4 l: e% `# |% y5 S1 X#include <mach/da8xx.h>& ]( k ~" M3 }# i0 x
#include <mach/mux.h>
7 ^% N! N6 @; k( H
4 I( W) v& j* M! ]; Q/ e( P, j#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 C5 M4 k/ M. l; d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 ?$ o8 g1 ?7 K1 Q( x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 i3 h6 J' N/ T7 [2 s: A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& i, D( z, Y' D1 q h4 y7 {& W f9 Q7 z! t/ { p5 P4 A0 _ E
/* assign the tl som board LED-GPIOs*/
# z% ^9 u6 `1 y$ \: h4 Zstatic const short da850_evm_tl_user_led_pins[] = {
7 n2 r" B* ]. \9 P4 C9 A /* These pins are definition at <mach/mux.h> file */
" A% d- L3 W. X8 V, W0 M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% j# M3 V9 W5 T: M# {% |3 O! Z& f7 K -1 r9 d6 z+ n( S$ T; d! Z
};
Q9 `( b( y( p# o. _- p# z! P
, e8 R+ j2 t$ l1 _static struct gpio_led da850_evm_tl_leds[] = {
! q" k: B3 D. T A# h {+ R G* i8 A$ i( m M( b( s
.active_low = 0,
1 s& `# H* D: R5 |( D .gpio = DA850_USER_LED0,
) i1 r# x3 E& R0 h .name = "user_led0",9 ^5 K6 J) b; D H( s8 Z
.default_trigger = "default-on",
7 g1 r+ i4 K6 F" k: I },* Y( e4 E; v# Z$ F
{
' ?3 j. c$ i' `& A: z' x: G .active_low = 0,
0 v) _. x2 y7 l; ` .gpio = DA850_USER_LED1,
9 W4 Y+ \0 ^0 K& \/ V .name = "user_led1",
. b; X7 u7 ~0 k .default_trigger = "default-on",8 k, V' H- m g. \; P9 {: ^6 i
},
) L6 u& a, i; b/ A& Q* y @ {" E6 U: X1 ]) {5 k
.active_low = 0,- f' D* [ ^/ M2 {( R( [
.gpio = DA850_USER_LED2,
8 v. _. b' \2 d .name = "user_led2",
4 q0 S- {8 P) F: f; `1 z' x* z. N3 L .default_trigger = "default-on",- l, G! S8 O/ l9 j4 j! N# Q2 k, F
},
% O9 f+ T6 Y# N& q* F& C {
( Y* c% M& G K1 t; j! O/ q .active_low = 0,
; w" G3 `8 X8 L' C# u h. M .gpio = DA850_USER_LED3,
; C+ v8 K5 u0 T. G5 b .name = "user_led3",
2 T4 i4 C) R% Q6 C+ q& D .default_trigger = "default-on",, X% h8 l4 l3 Y {; {6 {' r% O2 Z
},
, V7 `1 u1 V; M3 K4 {. U( r};
C" N5 W8 Y7 B; b% z. v
) b% g, l: {4 `. Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 @& x3 _; ~; U: f1 e) A
.leds = da850_evm_tl_leds,$ K( ?8 ^2 C( y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 A, a3 E$ Q1 A# j};: l/ q% G+ M. o9 }+ \, @
$ r% d& t4 ^% {' G9 O% N# Wstatic void led_dev_release(struct device *dev)2 M. R% } P& I" N
{
. V6 N1 u1 c$ n};
" e8 f' U' }3 J# R2 s0 O2 W2 N# H0 i1 Y" G) T( [& Z1 }. ~) o
static struct platform_device da850_evm_tl_leds_device = {
0 J1 k0 R% Y+ v7 S1 x' ]! ?9 Z9 q0 @ .name = "leds-gpio",4 v- e- _0 L* r& q6 e- h
.id = 1,7 s5 U, d, a2 A! o R/ S9 K
.dev = {: [, g, J) n& F. l
.platform_data = &da850_evm_tl_leds_pdata,* _5 f8 \1 ^1 w* P
.release = led_dev_release,
- _" {; X! ~' z$ L: {/ Q }
8 k3 p$ F# b: q4 D9 h& h};
1 L. r8 v/ I) p6 Z9 N
/ }% W8 G [+ i0 O8 V8 L; k7 S$ {static int __init led_platform_init(void): n! o- A& y! Q
{
! w8 f. d, d7 E7 l# |& Q( o int ret;
3 r7 c0 P9 p/ g5 K#if 0
; G3 g' q' C! Q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; l* b. {# F; N0 d9 u1 V* e Z5 ? if (ret)8 y7 z3 L) p2 _4 k9 \
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! M, p/ \6 v4 F6 B! c9 D# ]4 i+ ` "%d\n", ret);
! ?! f* F- w: s; p8 u) f#endif
D, b3 U6 K+ _. E0 G ret = platform_device_register(&da850_evm_tl_leds_device);
+ y2 k0 v/ o' G+ @- M b* ? if (ret)
# Q- M4 T6 P* u0 \3 w% {+ R pr_warning("Could not register som GPIO expander LEDS");
5 W0 H5 p! p7 v% a+ ? else
f. Y+ [- e& y. Q+ L) w3 P; x+ z printk(KERN_INFO "LED register sucessful!\n");
/ w5 d+ B) y4 U) N. l P0 ]+ P5 A. j2 X! \7 x4 o) j
return ret;
$ |5 B3 P5 d% V( E; N2 A% l}
$ F/ l: z( r2 O0 Z, e% Q8 ^
' E) b. J& R2 X$ Zstatic void __exit led_platform_exit(void)5 K! }7 d3 c- y; F6 |
{
; ^$ u; B9 Q1 R8 j: Q platform_device_unregister(&da850_evm_tl_leds_device);: y+ f! N) s3 U$ ]+ V1 X& t
9 y B6 K5 N6 |% d( P
printk(KERN_INFO "LED unregister!\n");( w; Y" {+ G) ^. v; S ^* r
}
2 S1 a( [3 U, @% `/ @2 U n) c5 V' y: ]$ V) e
module_init(led_platform_init);& o6 g3 X% Y# @- j7 [$ S' v% q
module_exit(led_platform_exit);
& t3 g( ]3 w& @0 K% h+ Z/ ]) W# }. R# d y7 ?- e8 `( k4 f
MODULE_DESCRIPTION("Led platform driver");
* u. q3 c; `( M+ E# J% tMODULE_AUTHOR("Tronlong");
( W- L/ l9 V1 e4 b1 YMODULE_LICENSE("GPL");& M& v& Y/ r' c1 c1 u! ?
! |- A Q" S+ F1 A/ m
|
|