|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- u& o7 S9 a1 r. j3 f#include <linux/init.h>
" \* i8 K: b( Z+ o7 s' p; ]#include <linux/module.h>. T9 N* c: y0 F* Q: R% a! v# L
#include <linux/kernel.h>" D+ h# g% s# j' a; B
#include <linux/types.h>4 `! w* [7 t1 n0 z
#include <linux/gpio.h>+ n5 q0 G( B& w9 }, ]- p: I& R
#include <linux/leds.h>
9 ~( [" p" U+ u, B#include <linux/platform_device.h>
0 F! Z6 r3 B" F9 U; I; g3 S/ D( D- Q" X; F
#include <asm/mach-types.h>7 o" T) O: n) x- Q) T
#include <asm/mach/arch.h>6 f8 Q" m/ u# W1 v% D) Y
#include <mach/da8xx.h>
4 v9 W8 c' J4 a; T$ R8 V/ h#include <mach/mux.h>
; v; O% e; o5 g, Z0 }8 t
) Y# W, ^% Y1 P$ w5 |9 A$ k0 S# n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
i W+ K3 E" _( ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# x" N5 O+ H1 m+ a$ N" @" ^# ^#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ K4 j7 |- t( g7 g2 ~0 |6 ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 Q4 e. g$ S+ N4 O: P! b- R4 V8 W# G! l1 k a
/* assign the tl som board LED-GPIOs*/2 O( }$ z& B9 f; J
static const short da850_evm_tl_user_led_pins[] = {: r7 D" n3 X% s. Z/ o" v
/* These pins are definition at <mach/mux.h> file */
) Q/ ?0 _) O, D8 f, Q% D DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 p3 n# D3 A) P$ o& |4 ~- p F- u9 v
-1
( f! }. l! K6 @+ `& R};
- {; Y) z2 g) d( S) i+ A. i8 c6 O/ ~3 s7 v4 s
static struct gpio_led da850_evm_tl_leds[] = {
+ H$ V; g' R2 B, k# ` {) e% A6 S% e4 h/ g
.active_low = 0,, A* t# h: J9 B- @3 o, i
.gpio = DA850_USER_LED0,
/ [/ H$ T3 x* n4 ~) \4 q .name = "user_led0",
4 s$ Y2 T+ L$ d5 F$ n .default_trigger = "default-on",$ T$ Y7 O1 R/ f# \
},: {( ^* K7 `0 J: i
{
" S& F8 }) B- i9 a- r- x# ^5 N+ t! y' p .active_low = 0,7 _0 _6 M5 I0 g& _8 i3 ^
.gpio = DA850_USER_LED1," s% {3 _! M' l K- G3 R! E& J* ]
.name = "user_led1",
j' z% i, |1 P1 D0 ~& z7 M .default_trigger = "default-on",
9 R! @% h. W0 T2 o* e },
5 L4 K( Y2 a. d {$ s/ Q ?; W- y1 K: @0 }
.active_low = 0,
& G: L- _1 L, T" _ .gpio = DA850_USER_LED2,( o% s, R) t) h4 w e
.name = "user_led2",
: e8 o' @3 ^, q* Y .default_trigger = "default-on",
! U, J; j2 ?$ e2 j4 m% u },7 I( K) k6 _( r' M; k
{
. ?5 M; O. H& A2 p! X T. B .active_low = 0,
2 ? _3 e2 w c% G1 g3 `! i .gpio = DA850_USER_LED3,
) L$ \1 V8 a' ^: [8 G& a$ J .name = "user_led3",$ A; t$ x( `0 u1 F, z
.default_trigger = "default-on",+ R/ w- `# a) F' P
},
! M- ^. j& C8 s" d};4 ~+ M) r7 q: ?: L o2 G
# B- ]! R7 `0 i1 ^# @4 V' X+ l" g- Kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. ^8 b; f% S! }( V+ V: j
.leds = da850_evm_tl_leds,( x7 o( a8 ]4 f& c0 f4 @8 K0 C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( ~/ H+ r, o& f ], L& u* q! ^};4 W* _" ` g7 m+ U( W
& [- i# Y+ F, v) r. |, b! P
static void led_dev_release(struct device *dev)$ J- L. \3 a2 D
{" J/ V5 O+ @! w' @ E
};
7 L/ k* h* b6 E
$ E6 r% _0 o/ V: K0 Dstatic struct platform_device da850_evm_tl_leds_device = {# T9 y6 n& K9 |$ f$ i
.name = "leds-gpio",
; F1 x) O4 }2 I" h* d .id = 1,
2 t) P6 C. F7 l" O6 [ .dev = {
# c2 X/ u& J+ L- T' m8 b# c .platform_data = &da850_evm_tl_leds_pdata,
& i+ }1 ~6 ^& H; N ?6 } .release = led_dev_release,$ T# }* V/ i2 A/ {3 T" d% {% _
}
, ^! c3 u+ Z/ B: S# Y7 T3 L- e};$ k* i: J9 ^7 b4 s5 {6 n! z# E
/ l& e0 f# X2 Z1 ~- ^7 _5 Astatic int __init led_platform_init(void)1 L# M6 Y" H u1 t0 C$ j% F- E# a4 R
{5 C. t# z; U; p6 _
int ret;
* l8 n% J$ K6 Y+ q! |+ G T#if 0
: p& L! y8 ^0 U ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 N7 V, b! u! N5 T4 x* Q& Z if (ret)
0 G( J- e- [- c) m pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 b8 E2 r. B2 V/ W
"%d\n", ret);# T3 ?, d6 ^/ n, e# ~/ D
#endif* }8 b5 h" `# y7 O3 e% R/ z
ret = platform_device_register(&da850_evm_tl_leds_device);" v! Z" M* Q& `% G
if (ret)8 Q0 s0 E$ v8 l" e
pr_warning("Could not register som GPIO expander LEDS");
% {* N; m2 |1 \6 t1 W( m else% E* P1 O) y" D- ~2 `9 |" l
printk(KERN_INFO "LED register sucessful!\n");8 C$ x6 ^9 B. C6 V! u% @
% i; ^ k; J0 m5 K
return ret;
8 T1 G+ W2 f3 C- @3 O" I}/ `9 i: @; `& u* ^. v8 G5 B
" O( Q6 ]2 [; j# K: T! G2 t4 Jstatic void __exit led_platform_exit(void)( ?2 |# R1 A/ z# n! F
{7 p9 t' c5 t% ^! H
platform_device_unregister(&da850_evm_tl_leds_device);
7 D* V4 h6 k6 K8 o2 Q0 d
+ e/ `! X2 c, @6 `+ c printk(KERN_INFO "LED unregister!\n");
0 D" z. T: N2 u% v4 ^* q9 t2 }}
: q- I# g8 S" h B l+ ]2 n; Z, Q8 u- i* U, X9 _2 l
module_init(led_platform_init);* v4 w$ }1 V9 r4 _5 h
module_exit(led_platform_exit);
, _7 j! g+ g* A' i+ L8 W1 y' r0 p. s! [) \: K
MODULE_DESCRIPTION("Led platform driver");
$ H7 ~1 z( A+ dMODULE_AUTHOR("Tronlong"); f1 g1 P9 [) a) S* y6 z
MODULE_LICENSE("GPL");7 o& U' w2 Z: U% Q0 n$ W) r
& q# x5 J* C- D9 w; c5 A8 |
|
|