|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& b* M/ u+ e9 u# k
#include <linux/init.h>3 ?: M) O) I3 J! V
#include <linux/module.h>. u% M" L7 Z. Z, _
#include <linux/kernel.h>
8 w+ { M( u% `0 C* s( ^) ^3 W#include <linux/types.h>
7 W" ?; R: X9 C7 h' U#include <linux/gpio.h>3 L5 I3 E! Z+ ~ O# y# a
#include <linux/leds.h>
6 o9 z" f* j1 d& x+ I- m% i#include <linux/platform_device.h>: ~) G7 f0 o3 _, ^; j; t& J
9 u7 j/ g! ~4 p8 ~
#include <asm/mach-types.h># o) ^+ h4 g; g3 I0 I( r/ W* x
#include <asm/mach/arch.h>" r* Z1 ^1 R1 m5 f2 {1 w
#include <mach/da8xx.h>
2 Q; |3 J6 r2 P: R" i#include <mach/mux.h>8 S. E3 l1 `- _
. \& ` M9 I9 {7 b1 _! n# i3 f5 w#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- z& r% @8 g! t- }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( @2 d! K4 v l* G& o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 M7 q, u1 ]; X# j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 \, H3 U! ^, h' _! s' [$ d( b% ?' G7 V8 ^. q/ \
/* assign the tl som board LED-GPIOs*/- a% Y7 @' Z# a+ q
static const short da850_evm_tl_user_led_pins[] = {( R- w7 A- T6 y4 z- K
/* These pins are definition at <mach/mux.h> file */
7 q& w- _% W, k& G9 ` f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) U9 O: X$ r$ i, f$ K -1
. w+ u* `+ I! g T6 C};
$ ^0 m8 ?) F* f1 b0 A0 R- g, v$ N j4 u$ [3 ]
static struct gpio_led da850_evm_tl_leds[] = {: R6 q5 K0 [0 S8 [; U+ }( w% o
{1 H9 c8 \8 B1 `7 n. l
.active_low = 0,
$ t( p/ ]% P9 v# y, z# G4 B .gpio = DA850_USER_LED0,( W$ F: K' {8 a& K" G9 [
.name = "user_led0", T" I& Z" y) y7 V/ T* m7 d
.default_trigger = "default-on",
* A) l8 n3 Q/ |1 K( Y, Z/ ?3 ? },8 x* H# M; t) J: c7 T" n
{0 a1 K& O- ?0 [$ i8 @: c% e
.active_low = 0,6 E7 z v9 ?' p- c, K7 y/ f4 d
.gpio = DA850_USER_LED1,
[! Q3 [! [) j5 S .name = "user_led1",
1 J% a: Q' C/ Q; a& y .default_trigger = "default-on",
. A4 g# p- ]5 J* P3 p },
+ a! d1 M) U6 m8 C2 w0 X {
* @! d3 D8 D/ \8 E6 p, f. P: G .active_low = 0,7 S( C0 O+ Z' f, T9 z1 I& v
.gpio = DA850_USER_LED2,, v" w; U. }4 }) R5 q0 M. u& e
.name = "user_led2",/ z, Y _( |( v& n7 q
.default_trigger = "default-on",1 x) b5 x* }) t0 ?7 G( T
},0 ]6 W. @0 u0 R8 Q; z
{
8 e3 ^0 l3 ~. K0 F" m .active_low = 0,
" _2 z* s B8 L& _4 h& v1 E: B8 Y .gpio = DA850_USER_LED3,
) s" M H) v' {8 Y1 B% K5 K Q .name = "user_led3"," d$ d/ H+ O. n0 B
.default_trigger = "default-on",, E+ S2 K* X' Q1 H
},$ s) J' W5 z( T2 i
};, T& M5 j9 O4 K' E4 |
0 u F% @! C# \1 @. nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) ?1 |! `3 T! n4 i
.leds = da850_evm_tl_leds,
w( j3 M$ v' [2 ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
x: H0 Y! A7 n; u; ?0 S8 L1 U4 s};
$ Y& n* j" {4 t$ o1 A- q/ y3 }0 U3 a2 b o& D
static void led_dev_release(struct device *dev) C9 ]; W7 ?- P( L
{; f" ~9 ]& D% K" \. y9 E
};
7 o3 l1 o2 i% D' T; z) y- ]8 P3 f7 E& n3 |/ l) a
static struct platform_device da850_evm_tl_leds_device = {9 l8 M0 m& ]. v6 D* L C5 u! m
.name = "leds-gpio",0 e3 W/ t2 p+ b/ Q4 t& s. Q7 e# [
.id = 1,& V2 d: t) X. Y
.dev = {) p" P- p1 G g) y7 _
.platform_data = &da850_evm_tl_leds_pdata,, q2 Y& [* v- Z
.release = led_dev_release,
! l/ U9 [2 k+ r }+ t9 e6 V5 t1 T* V
};7 C* v& t3 ^. j3 v
6 F4 H3 @% ?, C* x
static int __init led_platform_init(void)
9 ], I3 ]# n, {{
' N' z- C$ g% K3 I int ret;1 v+ o$ _: _& N+ [
#if 0
! y0 O4 u$ {6 y( K# y# T# @9 T+ B ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ Z% S8 m* n9 G+ K1 @" V- A$ i( n
if (ret)9 T `2 [" E$ R/ Q' G0 l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 Z, \4 {( T6 b- I6 u# H* U2 |
"%d\n", ret);
6 R- E( _5 G4 `#endif |% k3 `4 o/ [) ]( k
ret = platform_device_register(&da850_evm_tl_leds_device);! g: z9 C, K$ s( a" h
if (ret); z' i; I8 B, P: T
pr_warning("Could not register som GPIO expander LEDS");
$ k* n* s5 H$ q+ ^ else/ L$ a' r3 v4 n7 ~8 D( h6 q; u
printk(KERN_INFO "LED register sucessful!\n");
: s" r% k& r# h. |! b2 N: M6 k6 e% Y- i
return ret;0 `0 w I- [& C
}5 |( M# m- C2 A7 \' F& U
) `+ {, U& ^- K3 q, jstatic void __exit led_platform_exit(void)
. h' Q& e* A; e9 P{
0 c- y9 [/ F( P& i& r platform_device_unregister(&da850_evm_tl_leds_device);- ?3 @! D8 F- }
2 V4 l% v) {8 x; r! d9 o+ X printk(KERN_INFO "LED unregister!\n");+ c$ ~: n5 B9 o: e4 ^
}
* S# d3 ~0 W3 ]$ v( X0 n5 w
# j ]1 d; g& gmodule_init(led_platform_init);
$ m5 Z9 v( S' Bmodule_exit(led_platform_exit);
. w/ N" A. p+ d$ L3 E% `: v% A
" }; S$ D) ^2 K) @MODULE_DESCRIPTION("Led platform driver");$ O" t; i0 L7 j3 V5 I, Q
MODULE_AUTHOR("Tronlong");0 T3 e3 w# l: ? I+ x0 O
MODULE_LICENSE("GPL");% U- i/ r o" g
8 m$ V7 c0 v0 ^
|
|