|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; [* O, Y3 K9 Y# u. J
#include <linux/init.h>; P; u+ Z# ^7 H# V/ a
#include <linux/module.h>6 Y# D. k/ V( b6 }8 `2 s
#include <linux/kernel.h>
2 ~& y& o2 B# Z5 D( t$ P#include <linux/types.h>/ G& n5 @8 E5 x
#include <linux/gpio.h>4 z! S' c0 j7 R0 S# ^1 M! y
#include <linux/leds.h>
& L' u1 |7 G- E8 J5 u#include <linux/platform_device.h>
6 L1 y5 Y! Z/ U% u- E \* B( e* D( } t: {, y& s F( d
#include <asm/mach-types.h>
! Q& g) k: x1 ^8 r# H0 A% E$ E' `#include <asm/mach/arch.h>
( c6 @, B" o4 y, l R1 E#include <mach/da8xx.h># H- Z9 q5 W, h- l' D% ]* s
#include <mach/mux.h>
- |( ^ B# n+ z6 _7 k4 P. M6 b/ r$ A+ u" D' x) Z4 d' d$ f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 `* q* A) I# N7 q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 `- q+ ~) ?/ k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- V# U( l7 {' v: Z7 R
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 ~) e1 ?4 h4 U. i: J3 ?
# _$ a4 r! ?% x
/* assign the tl som board LED-GPIOs*/. M$ f. w: g# t/ v+ J
static const short da850_evm_tl_user_led_pins[] = {8 `4 e& b; \& ?0 y1 J
/* These pins are definition at <mach/mux.h> file */) }0 G' B* j. _# p' R
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 H/ W9 _! \6 L( x+ Z' a -1
/ y3 _) d S6 T6 r/ v7 ?# {) N7 F};
) p2 Y8 n3 W) A+ ~5 `9 c; E' n, [( y4 ^# s. e- u
static struct gpio_led da850_evm_tl_leds[] = {! W6 Z/ X8 u$ \2 }2 w } Q
{
! ]6 s9 W3 p% ]3 o1 P) O .active_low = 0,6 W4 }" G7 }8 D2 T; J9 _7 _$ P
.gpio = DA850_USER_LED0,
+ @0 i8 v! `& p; A7 n .name = "user_led0",% Y& x3 O! C* Y
.default_trigger = "default-on",
! z0 ]" d3 P! M% J7 p1 T% s! B },! [! X+ O9 I4 n1 T6 p
{/ e0 Q7 M5 g2 f$ m
.active_low = 0,8 l, B8 Y: d* N) _, q" ]
.gpio = DA850_USER_LED1,
6 z0 [4 r0 N+ ^1 _0 x2 | .name = "user_led1",
3 v4 t3 g, K$ f& w: H .default_trigger = "default-on",: s% n+ u4 N' `+ z, a7 R- Y+ I
},$ u0 L+ d5 C/ q8 i: L! r
{
) {! ]" e% f& I: P- ] p3 f0 a .active_low = 0,' h/ f8 G T: Z
.gpio = DA850_USER_LED2," ~- Z6 B9 m0 Z3 y( ^# e
.name = "user_led2",: I0 |$ @9 C; Z, R7 k
.default_trigger = "default-on",
7 h( n8 x5 K9 m) N* `) ~ },, n* Z0 a$ ?% ~; }
{2 u) g) g1 S' _ b! Y
.active_low = 0,& ^2 _- `3 ~4 Z7 }
.gpio = DA850_USER_LED3,
2 ?* `' k( X! q' Y# K .name = "user_led3",
* F9 a* Q* Y2 p6 F! o .default_trigger = "default-on",
1 r- U/ p2 V* M8 T Q) G },* A8 I {' ^8 O. h) o b1 |0 V8 K4 T
};
" j' a0 x. m3 {- U0 e
& R" G" X4 c: T! f7 H! b V2 Gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 R" _% k2 q: b1 [1 T .leds = da850_evm_tl_leds,+ p4 K" V, _3 {2 k6 i
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! ^- `% c' _& N/ h( v. l/ a5 L};2 g. H/ j- Y0 l: ~ H8 n- e$ R$ ~
) B( b" N1 \0 w& t. X; Fstatic void led_dev_release(struct device *dev)& v9 R& B: O* w% v+ @' U" a o/ ^* v. m
{" F8 S- A. ?& M
};
2 h* r, {; A% R# O$ r8 N
! I, K" N* ?7 X. hstatic struct platform_device da850_evm_tl_leds_device = {; \( {: q2 @0 ]4 K( W
.name = "leds-gpio",
6 \" b1 ?* _& T( F5 _. @$ | .id = 1,8 z, q9 A; M' b3 t+ R; v" G. w
.dev = {( x9 y& g) h$ N: d7 j# L. N
.platform_data = &da850_evm_tl_leds_pdata,! |$ U9 i8 k: _: Z Z
.release = led_dev_release,
3 v V% q( c- k& B9 k* {% \$ J; U }( N5 M. `5 b2 h
};. Z+ Y6 Z2 e) n' t0 e( O6 i5 q& v
+ `8 w0 O4 k9 ?+ `0 r' o
static int __init led_platform_init(void)
) m5 f& ^. b% M" m5 x" A7 r1 H8 Z{
$ g) [" ~# @/ ?0 p/ M int ret;
" U5 I* c8 y: ?) h p8 Z# t: O0 F+ }#if 0, c' J7 z1 o, _& I$ L
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
v, r5 j5 _# P" h" ?- j" T& p if (ret)6 A% t. p/ B1 T2 k
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. S: M$ ^$ S* h0 ^9 _* o "%d\n", ret);" A: T5 s. b2 s" W3 ^" g
#endif
- C, W( D! g+ A ret = platform_device_register(&da850_evm_tl_leds_device);# G+ O# f5 v1 q0 y: u' p
if (ret)
2 b& z# f- j- _- N pr_warning("Could not register som GPIO expander LEDS");% ]1 Z3 y4 v* m, `4 M
else
& O& k6 J& S$ G5 {+ u printk(KERN_INFO "LED register sucessful!\n");8 S2 c% O2 _2 Q" s9 p
. k4 q9 f: M2 {3 i, e& A+ R8 {7 T return ret;- e& f F# f. y; w
}7 E0 N: ^+ l) D1 U. t- D6 U
6 [1 M; L# P5 z5 f8 Sstatic void __exit led_platform_exit(void)
Y1 d: t$ @8 k. E{5 k( Q7 X4 w+ m7 c0 O, ~: ^
platform_device_unregister(&da850_evm_tl_leds_device);( o0 f, b5 o! ?$ G7 j# a3 f
q! O9 @5 d5 F7 K' [8 q
printk(KERN_INFO "LED unregister!\n");
, V% G' D% T- \- o}7 W. L* b7 R/ x# ?: r1 F$ k
6 x3 v8 p4 _! h h2 _) L3 A% X
module_init(led_platform_init);
% V( c" [* M. Nmodule_exit(led_platform_exit);5 T9 f; c" I( a$ I
) t3 u* I; X6 @" i4 w" [: J9 zMODULE_DESCRIPTION("Led platform driver");! I' y/ B5 ^1 h- l; X
MODULE_AUTHOR("Tronlong");1 z# y# @: S. M8 h" r
MODULE_LICENSE("GPL");
2 h* D- e$ j2 G- W0 h* M4 B. e+ P
|
|