|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' c) J- e7 `1 [* q
#include <linux/init.h>) d* V( K$ P2 M7 X' R% ^
#include <linux/module.h>8 d- x- N: k6 v: V6 P3 Z" J2 U
#include <linux/kernel.h>
h |% {( D* ^: ~ F#include <linux/types.h>9 H$ Z( {7 g& m$ Y' z
#include <linux/gpio.h>
1 C) a7 Q$ d1 S5 J- a9 p; k L( a#include <linux/leds.h>5 y t0 h3 \- W% p" i
#include <linux/platform_device.h>. c2 _ Q3 @5 c% R P
6 v! U3 M! K% k _8 E |
#include <asm/mach-types.h>6 z* N( r7 l5 \8 s0 W; n+ o
#include <asm/mach/arch.h>
/ ^$ W2 k7 U# L0 S$ C# D- r#include <mach/da8xx.h>
0 S/ u: T0 N% |% Q4 f S' T* X#include <mach/mux.h>
) _' f% ?$ t. ?
/ N g9 m' Y8 G: w5 C#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 y2 Z& o/ m4 v3 q# s. j6 i
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# E& |! B8 @5 P) W! S$ \! t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- ~& ?0 U+ d) b! v
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 \/ ^( r1 G- p, ?3 {
; F" B. B0 @& g) D6 A0 F5 @
/* assign the tl som board LED-GPIOs*/
2 Q( u1 b, A0 A" c& K3 Kstatic const short da850_evm_tl_user_led_pins[] = {6 J2 A4 g4 m, O9 S- I- s
/* These pins are definition at <mach/mux.h> file */4 U/ D9 G' w: }& E# V) c' v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 c F o) P# Z
-1
1 [0 C# O8 J4 N4 {7 s# X: q8 f};
, }% \% T$ I. F; R m- q( Y7 L% s; _- F6 {6 |( Q3 W
static struct gpio_led da850_evm_tl_leds[] = {
7 _" u$ X* O# v) X" X2 D {
3 f0 J4 f T8 c8 L3 P2 S9 M' O" U) [ .active_low = 0,: o. P5 q6 ]4 S
.gpio = DA850_USER_LED0,( \$ @$ j. |) A* Z" B
.name = "user_led0",) d* m& z- M$ z, v! g. t
.default_trigger = "default-on",3 F2 a- X% q/ p# t
},' p% S8 o$ n4 f: D( E
{
7 z; e: a! R2 S .active_low = 0,
: t# e( ?# b6 ~ b! T J .gpio = DA850_USER_LED1,
( ]) z4 J2 h2 @( k5 i .name = "user_led1",9 z4 a! s" l' A! {8 ]( v8 I A
.default_trigger = "default-on",
* d7 h, w& |* Y+ k2 G: l6 A$ v' s },
- K" i! c2 G e E' w* ?2 g/ O {
: f, d' \. ?! l) y8 x .active_low = 0,
/ w/ y% ?. P0 [# {9 g$ }) U .gpio = DA850_USER_LED2,
% A3 M% S5 B( ` .name = "user_led2",5 T" I& a0 x4 Y
.default_trigger = "default-on",$ j5 z, m) U' l9 k
},% {/ \+ D4 q: ] z& |" Q# z: w
{- p9 x! G! g2 O
.active_low = 0,
0 h$ x u; T4 t8 R/ W6 g1 P .gpio = DA850_USER_LED3,
- m( H& Q- i& U* H .name = "user_led3",
+ {, d k, {6 x) C w1 C/ z .default_trigger = "default-on",
- r8 v" s5 |' I2 a },
6 I% J& i5 ^+ E1 g8 i};% l9 e8 T1 i6 n8 P, u* S
$ I+ b1 g8 a# q4 }static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* v8 k6 [2 G9 j9 ^0 m .leds = da850_evm_tl_leds,% m+ m* `) T) O) L9 V2 i
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),% a' @* @( K4 Y8 G
};( L" T" P$ _ X" B: r0 X8 H
$ h$ D/ i9 R$ R$ Z6 `* @
static void led_dev_release(struct device *dev)/ O/ a0 F3 S5 \+ F
{
# P* c1 B5 Y- w" i- u1 L# e) a};
: z1 @) b: _ @0 [6 W% p9 C, q% ?5 Q; T# Y0 l6 R3 N2 e3 [
static struct platform_device da850_evm_tl_leds_device = {
2 I* H6 A+ O V, [& a/ O' S/ w .name = "leds-gpio",9 g4 z& x1 |0 _/ W
.id = 1,
j! S7 X4 Q+ f( F4 a4 C .dev = {
1 S4 ?. ?2 O) a8 c .platform_data = &da850_evm_tl_leds_pdata,: J4 R+ v! j% b) E
.release = led_dev_release,7 S3 J5 {! Y) o7 G4 s4 s
}6 j/ b, r" M6 S* q$ D
};
9 }7 |$ w7 b9 @' q+ Y
" W+ X4 G9 j; c z! y- D9 @static int __init led_platform_init(void)8 q! N! C" }% b6 T# T+ r
{
_5 }; g/ `* k& m! @ int ret;& z: f8 f7 W) j2 |9 Z1 `
#if 0# a2 K/ Y) I l. _) t) }7 j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 U {* p/ C! @% H' f
if (ret)
3 z. F. v2 | z2 W# r& q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; U, L. s6 N5 q* |" g& k. n3 i8 l, q4 b "%d\n", ret);! `8 q W% x- H" R
#endif) a3 }# K- X/ x# ^4 P
ret = platform_device_register(&da850_evm_tl_leds_device);& M9 m' P5 c# ]4 i- e# a# o" j
if (ret)
% ^9 ?6 Y, h3 A$ a0 |+ _$ D( ?) P pr_warning("Could not register som GPIO expander LEDS");
# h: C0 N N0 K8 H3 A2 J5 j- f/ W2 V2 ^ else/ m5 P: a5 m4 o/ u1 i
printk(KERN_INFO "LED register sucessful!\n");* r2 b. w0 x2 j( I
& Z" ?2 S& A7 K4 P
return ret;
" E; C: @: t j [. u6 c# Q}3 |5 c Z4 C) a f- _
4 q" q5 ~) Q3 P) {static void __exit led_platform_exit(void)8 h; |0 N1 ~1 k
{7 v8 M* r% T; L; a% @+ d' r
platform_device_unregister(&da850_evm_tl_leds_device);; n/ F( C1 E& K8 w3 N! B
, g3 h1 b4 l( P0 N6 y# b1 f printk(KERN_INFO "LED unregister!\n");7 h. ~5 n q0 J- z$ b$ i4 A7 a( L! ]: n
}; c6 ]! y9 i& z' R0 E' l% d
( v5 w6 y7 b9 _0 i+ o5 amodule_init(led_platform_init);1 B% M' X" s) y9 ~- j
module_exit(led_platform_exit);6 p. }* J2 i5 Z& _0 m4 C: H
0 _( D. y- {8 s- R$ RMODULE_DESCRIPTION("Led platform driver");8 T& A6 u- I, W* g# Z
MODULE_AUTHOR("Tronlong");
# n6 D5 h9 G! ^/ @2 ^# f2 VMODULE_LICENSE("GPL");
* y3 G( e+ Q# m0 s5 s$ ]: u* e A8 i5 C7 S, z& R2 F" Z
|
|