|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: r, R1 R' Q, L#include <linux/init.h>0 R8 {. v I6 L% x" v1 d. {
#include <linux/module.h>% U$ A& d0 K/ T
#include <linux/kernel.h>
! f8 j% g5 S' o) D! r/ M#include <linux/types.h>6 |5 Y) @, f- |% P$ W" O: X
#include <linux/gpio.h>
: k2 N# t2 Z3 K0 V) J7 b' M#include <linux/leds.h>; U: _; D) F$ o0 f, }2 C
#include <linux/platform_device.h>
+ G/ K9 M `( Q# U7 v) M1 m* u- G, ~$ c2 p4 J6 S
#include <asm/mach-types.h> a6 Q3 g7 ^4 o
#include <asm/mach/arch.h>
1 b9 M/ O, J- r' ]0 b! V% D4 c#include <mach/da8xx.h>
6 T& K( Z# _; H `#include <mach/mux.h>6 g m% }2 d* B# ?* X
: D5 ^5 h& @8 i& O8 f7 A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& J& l* | T" j) \9 U#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" u7 v) w1 i! Q8 p
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# T5 M4 E+ ~) t9 q" d#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 N. J) Z% ]" j! _3 A
8 }- b2 r2 n$ e( E6 R
/* assign the tl som board LED-GPIOs*/9 T+ Z5 M( F4 N6 `' U
static const short da850_evm_tl_user_led_pins[] = {
5 O' {5 z& j; L /* These pins are definition at <mach/mux.h> file */: k8 X" p9 M. M0 A) v$ T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 F; E5 J9 z0 q/ H+ f2 N
-1
* D9 P5 r3 y( u8 n$ |% c9 l2 C};
# U5 @- G4 i9 c9 {% u, e4 G3 @" @8 w
static struct gpio_led da850_evm_tl_leds[] = {7 @/ q4 X& A1 X
{' U/ s8 L/ e( Z* g' x
.active_low = 0,
- k+ O, O$ o; b* k( ^ _2 {4 l .gpio = DA850_USER_LED0,6 ^, X0 H5 `+ U/ r$ J
.name = "user_led0",
0 ~: X! K& ^0 @' Q5 M8 i. R( x .default_trigger = "default-on",
; T# A- W! s" E% Z( P- P0 @ },
0 |5 { v3 E6 x2 N0 H( O! H {
4 e) c( S9 H. M% {3 y) k2 F+ j .active_low = 0,, X* g- T+ o6 }6 J9 c' B2 @1 A
.gpio = DA850_USER_LED1,
7 c& m- H; O, C1 g4 c6 d! H# {* i .name = "user_led1",. S9 U f1 `' o2 c+ {
.default_trigger = "default-on",/ Q% D: j& t9 @. q' [% v p* J1 p
},( E+ d; X% |( P6 v
{
" e* z) H% [4 q( ~% H& ]" L1 w .active_low = 0,9 p0 t- q: I$ A7 w# q, i, ~
.gpio = DA850_USER_LED2,7 ^$ q+ J, W( Q; R% h: j+ P% T
.name = "user_led2",
9 T% y9 x0 Z8 L2 R3 G& F; K .default_trigger = "default-on",
% _, I& z6 V7 B# d" f },9 F. h5 y0 ?- E3 g3 B$ K! U
{
- W. x1 A$ ]0 O .active_low = 0,
% i6 Q% t7 d) ~! ]9 s .gpio = DA850_USER_LED3,, X- Z0 W( j1 x8 S8 v
.name = "user_led3",
' P+ G$ V" S' J+ h ~ .default_trigger = "default-on",7 |* d) F, I, X' ~! _) `$ |
}, {, m. O! |1 E# D& h: Q" {' i( m
};
N3 H! q$ C. {
8 v# s+ Y! L9 vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; T/ W# B. a. L, [1 n. U& V7 N; M, x
.leds = da850_evm_tl_leds,9 l! y$ K3 c ]# F$ J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),% {) ?6 K) ]7 I5 c4 D' c3 ^
};9 I7 X5 S* S1 U- H0 ?! j
! E x6 |* c" ~, ~) M6 |
static void led_dev_release(struct device *dev)
* b: |; N0 V5 b3 r3 b+ ~{
7 @" l$ {/ p( B: l};
1 V! Y7 N8 l6 z: [' a# t8 z2 k! @6 H6 D% b
static struct platform_device da850_evm_tl_leds_device = {
& n) F/ s/ M9 B: k3 W! C .name = "leds-gpio",# R" U% ~' K% q
.id = 1," H2 r' f" t5 E1 Z5 K+ V! M# Y
.dev = {1 a2 \1 @8 A! O& R# O) c- _! @
.platform_data = &da850_evm_tl_leds_pdata,2 c$ F+ c& V7 Y3 R5 G% C/ H
.release = led_dev_release,
' [9 a" B7 x- B9 ` }0 N! R( l! T! O- a* E# T; T3 u1 k7 f( K
};
8 {! m5 N4 ` C
! N1 B- i4 s W7 a4 hstatic int __init led_platform_init(void)
/ a4 m5 K5 B- V) @" N) ~{9 m* v+ z' g$ i! r" }. i5 E
int ret;
$ R* N7 \8 e; t+ b( n* A4 d0 T5 d#if 0
8 }6 Z( p) C# Z. Y3 ^ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% N1 u+ V$ \: v) o+ v if (ret)
# m" y( d- N# x! z4 k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: l% F# ~: b. B- ~8 a "%d\n", ret);
4 c# I( D0 U$ A#endif
( Q( I/ p( S4 p ret = platform_device_register(&da850_evm_tl_leds_device);% ]( s6 F0 O# ?( q
if (ret)
?8 ?' m* o( e6 \- K pr_warning("Could not register som GPIO expander LEDS");! e5 k1 {9 }4 _; A9 V" s
else
: n% H: J4 J' k' y$ ]/ }' I( ~ printk(KERN_INFO "LED register sucessful!\n");- T& B% p8 `% U+ `4 b
) P4 p( M; y# P- ^' c0 J return ret;5 N O! {2 K& `" _- a3 y" N1 }8 s
}
* N/ D2 y1 n! T. x( x
9 q1 w G& |$ p# ~( ~static void __exit led_platform_exit(void)
- p' w$ m# X8 R! n6 I, _! l{
3 W: Z% @; y. g' B, L! q platform_device_unregister(&da850_evm_tl_leds_device);. x6 J: r5 b. Z d5 y
z# @4 B, y) m; X/ _* t printk(KERN_INFO "LED unregister!\n");
$ ~( F1 U0 \! U4 d}
/ G" q1 ]6 n6 w7 M9 ^4 {; k/ |! Q2 O8 i& x5 m) |( m
module_init(led_platform_init);
* C2 p' ]5 J+ T4 }& m& C n1 b3 Pmodule_exit(led_platform_exit);2 D. `2 Y0 T+ O
" e/ z/ c. ` m' zMODULE_DESCRIPTION("Led platform driver");! {, d+ `* \4 E4 R1 z$ f( |, F
MODULE_AUTHOR("Tronlong");
" G! M1 \; I' b6 E7 `MODULE_LICENSE("GPL");
& ^) E, {3 v( c1 b2 d: f
# H* b8 O! K7 }8 E |
|