|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 m* h! V1 t# m) y* X& U#include <linux/init.h>* c0 r$ i5 }$ A% g, j! _
#include <linux/module.h>$ O5 t" u2 F6 q6 ^$ J! `' m' F' H
#include <linux/kernel.h>) r; N% c [% U7 a2 r
#include <linux/types.h>
# V6 B9 w+ p5 m' z" m' U#include <linux/gpio.h>2 D e: G+ ?% o2 j" @3 X
#include <linux/leds.h>9 }, D8 r* \+ W
#include <linux/platform_device.h>4 y' P. m& v0 r. M! V9 c
& o! B; r+ l% K: L# U- k#include <asm/mach-types.h>) i6 \6 i2 P i% ]
#include <asm/mach/arch.h>
7 y, g2 |) H6 n#include <mach/da8xx.h>' o9 m5 B, d% N" D* A; C' u
#include <mach/mux.h>: u* T0 X ~% {0 I) k
8 g( r& Z" n* v1 E7 v1 K0 D#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* i% w7 i$ K7 h# `9 J' }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 t# k! `4 c# L4 ]6 W#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 V& M# w: {! e/ h#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 _5 I* @: X+ p. m- ^; c) k8 q [+ Z | C/ k; B3 P
/* assign the tl som board LED-GPIOs*/
' P0 Z) q2 j! @0 }+ `) [static const short da850_evm_tl_user_led_pins[] = {
R% T5 z7 {9 G9 o /* These pins are definition at <mach/mux.h> file */
/ q# t0 \+ z3 G: }% b' f; f4 [ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 Q E6 O; r j, e; p) v4 c3 x3 U -15 X/ g! l7 M* M7 e6 B7 x0 t0 t- E
};
6 n9 h& L+ e2 S) d) d2 p7 w( f0 p& _0 @4 Z+ [4 C2 a+ ]; z# p7 F
static struct gpio_led da850_evm_tl_leds[] = {8 q) ?0 e" S* O g- Y* H
{
0 t/ k3 d b+ g4 ~8 ]3 T7 ` .active_low = 0,
2 e9 d( V: ?' S- C .gpio = DA850_USER_LED0,
4 f" {+ o& v8 z* b- k .name = "user_led0",3 ^' \6 z' B0 K& ]; A2 |2 k) Y
.default_trigger = "default-on", c# I: q1 p( H5 t- m2 G- V4 ~
},
1 y B9 e5 T1 c- P& W* l {4 F9 l1 h p- _- h
.active_low = 0,9 m9 K# | N2 [) Y
.gpio = DA850_USER_LED1,
( U3 }% o6 n6 { .name = "user_led1",
! Y. H+ V/ j5 {4 Y, J r .default_trigger = "default-on",
# A, @% \7 Q' s3 c# G0 q },( J% }5 R5 B! i& l4 d$ Y
{
- A3 v6 H- K. @2 |# u: c# Y .active_low = 0,
* }# m% P: s5 Y5 T7 f .gpio = DA850_USER_LED2,/ |. L8 t7 e2 g. [# w
.name = "user_led2",
' [- ~ B: @9 I1 D$ z) M B .default_trigger = "default-on",
$ f b/ p2 w, y" n$ X },
' r7 G. g1 U- G9 N4 z! f z* R {( Q4 q2 i: A2 F/ b8 r% N
.active_low = 0,, r5 ~$ [8 U+ r: z$ T# c8 j4 e" d
.gpio = DA850_USER_LED3,/ p f/ S# i4 J i3 k
.name = "user_led3",; g) q. [: ?( a5 G5 k8 A' e
.default_trigger = "default-on",
+ N" L2 ^) k1 L$ H( @ },2 ~( ~4 L! o4 V* e4 A/ X
};; r7 C0 {1 {! f3 Y+ e
/ I: J- \1 M; B; o3 H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 ]- O$ W& y3 E, a
.leds = da850_evm_tl_leds,4 l: I! A. [3 P4 D: `. z E
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),* v4 ^* p* U% B( v6 H7 C
};
. Q' V# U- h5 o( C+ r% k. g8 }/ ^/ K
1 C1 a. ^! g8 g" o$ l& K) Y% xstatic void led_dev_release(struct device *dev)* r/ B! U _1 K: m5 W+ A1 o
{
8 C. @% w; f# o) B% X0 i" @};
% O* q* |9 v( k3 K/ J4 y& |" L7 }9 r* j: z0 w
static struct platform_device da850_evm_tl_leds_device = {
+ F$ w, M) j* f9 k .name = "leds-gpio",
* \" ~: u9 P d0 u .id = 1,
9 e$ ]! V- t) ~0 a' ? .dev = {: ?- Q+ f* d2 H. g6 ?0 Z
.platform_data = &da850_evm_tl_leds_pdata,7 a* t% P9 o0 Q% P8 A2 H& v2 Z
.release = led_dev_release,
# g" K& m2 { O' A7 y5 s- e& N }2 h5 u: i$ i5 M/ s, g
};
- x( s. w" [( U% h! Y! L7 T# V% b7 m2 ?# g3 j
static int __init led_platform_init(void)- ^8 h2 k0 K- ]7 `
{1 Y! C, Y: q5 z( I6 @6 E5 }
int ret;
* U5 u' s$ [6 m5 k! d#if 0% Z4 d# d; q, m& L$ s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) x9 C% j* |9 s% h5 |6 i- q, J if (ret)
+ @/ S4 p5 `: d) t: \% F7 L" ~1 K pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 n, ?& P {: H( b; u4 z "%d\n", ret);
0 a! Q5 j2 V+ }5 c: M#endif
# ~9 _, N/ i' e: b$ L/ Z0 B) w. x% A ret = platform_device_register(&da850_evm_tl_leds_device);
) z5 ?0 y T6 H) T- y if (ret)
% K7 y# m& _$ f$ i" } pr_warning("Could not register som GPIO expander LEDS");
8 ^! C5 I. a$ u9 u else& A! ~4 r& F& x) f
printk(KERN_INFO "LED register sucessful!\n");
1 ~; H0 S# I2 m& p% R. _" {3 K
" `8 ~: I7 @3 e5 M" T return ret;
. w3 h1 [0 t) {7 @9 A+ A! l6 s8 u}
$ B# K1 X" V8 w* E0 `
/ y. M* @" @7 F6 u8 ^6 U9 pstatic void __exit led_platform_exit(void)
( z6 G) E, c7 q$ c( v{
K$ @4 P( i% l3 |$ x# Z platform_device_unregister(&da850_evm_tl_leds_device);6 w1 o1 S" D) e0 a' p
' c" k5 o3 J1 `" J9 p printk(KERN_INFO "LED unregister!\n");; t( t5 e K! b
}
& X" e' A* ~# c. I" j' g. ^8 J, W/ ]) e. i$ J
module_init(led_platform_init);
, `/ p& c9 z# {. d/ f; S- \module_exit(led_platform_exit);, k) i$ }. j. U3 F7 P
/ Z" C% N2 n1 }( o% l* U' K" g
MODULE_DESCRIPTION("Led platform driver");' J6 Y. B }; Q1 [
MODULE_AUTHOR("Tronlong");
; ?& U. i2 S n1 bMODULE_LICENSE("GPL");
' F% n7 [0 P1 I' v( d+ v$ I K* s( M' |
|
|