|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 _7 I1 S5 U: {7 G0 W3 i
#include <linux/init.h>
( U0 f; o( [+ ?' g#include <linux/module.h>( o+ w0 T7 d% \ _
#include <linux/kernel.h>4 | P( r7 m) T) h
#include <linux/types.h>
) C) b! g5 [5 H( _/ U#include <linux/gpio.h>
7 {3 k& P2 M0 U#include <linux/leds.h>
% C( V) N( q# ?1 w' J& f* u2 [#include <linux/platform_device.h>" B! C: @3 z' V8 V( w- Y% T
; d& y* X- \) _ H, g# p#include <asm/mach-types.h>
% l* j" C" ]5 S* s4 n8 }# g9 k C8 w#include <asm/mach/arch.h>
- D, }8 v' `7 t) T#include <mach/da8xx.h> ]2 ]$ l) F- D7 @+ L# l2 Q9 ], q
#include <mach/mux.h>0 G: E( h) N) x# ]; q# B- |
, w6 A$ j; r) C- { a9 B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- K' [1 A6 k7 q/ \0 M/ W#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 H1 \; B3 Z1 O, {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- V: w- I1 D$ F+ r/ T+ m$ Q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) |; A% |: z) o
: }5 D& f6 k7 o2 Q7 p0 m/* assign the tl som board LED-GPIOs*/
) Q- A7 ^( q+ B( i" T$ lstatic const short da850_evm_tl_user_led_pins[] = {
7 w6 @! i/ [3 c, L* L! f B9 V /* These pins are definition at <mach/mux.h> file */- F5 l( [, q, `2 A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 D: T/ }( F9 w5 d9 d: u -1
( i( p2 c' ?, _' x, n P" Q: V};
& ]- p9 R' J, e* k4 c7 M) X3 i# ]1 ?' O! M
static struct gpio_led da850_evm_tl_leds[] = {
5 \2 |) B) B' Q) G Y! }6 u {
) s% L! n. L1 H0 Y .active_low = 0, U, M! F# @6 I
.gpio = DA850_USER_LED0,
6 Y- o* w7 R: A. j .name = "user_led0",
7 O k8 T% h* e8 O .default_trigger = "default-on",
$ ]# F5 G& L# ^# J },
1 l7 ^" l, q7 a6 H# a {
! O' x0 U4 S" Y5 v* r' Q/ \ .active_low = 0,
7 g- j( T1 ?( G# F+ I .gpio = DA850_USER_LED1,
; `& u! g3 D3 A9 f' T .name = "user_led1",+ r8 C% I$ u/ W0 x: I n
.default_trigger = "default-on",
5 X( K# |9 l8 ?5 | },
8 J- S+ D! D: z7 u M {
_2 r- ~5 [6 n: L I: m/ h2 [7 y% ^ .active_low = 0,
" h5 H9 z7 S& n! p3 t: H2 O# o .gpio = DA850_USER_LED2,8 r' J _- d7 Z- E
.name = "user_led2",
5 L5 d7 B" T f) E .default_trigger = "default-on",3 G: B! B, S* ^6 Y, l7 p7 t' C
},
; A8 W- P0 K* q) ]! d7 |/ Y, V' w/ T {
5 L; w8 v6 M( ~! B .active_low = 0,. G2 f4 y, I4 T- l
.gpio = DA850_USER_LED3,
4 y- s5 |! e0 z) ?6 N8 B9 y .name = "user_led3",
/ g: b7 c7 X; l" z; u& e0 O .default_trigger = "default-on",
% }+ P$ J5 @0 W, [$ u8 b6 }7 x; d V, b },4 D. ]0 m8 C+ R% {3 q
};& C1 i1 C9 f/ u$ \: I0 R
8 V/ c2 A2 G, T" n& ~9 c6 Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" V4 @2 S3 ^2 V: H+ | .leds = da850_evm_tl_leds,1 G% g+ O. R9 }, {. k8 U. o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," b2 }# e1 m0 r7 d, F4 j
};- U% H, J( A$ ^) T! l' r4 H! n0 H
c/ q, p+ b) }+ ~static void led_dev_release(struct device *dev)
" {- L; E3 t y- o0 n% k: U3 m{7 ]" l8 w6 U& t# W
};
7 c" P O3 X( E0 B) {4 g7 ^: r* y) a8 d
static struct platform_device da850_evm_tl_leds_device = {9 e% _1 D+ F& X7 p4 z5 I
.name = "leds-gpio",
1 ^$ G6 T: \* @8 k .id = 1,+ _/ I8 X' G% T' n3 r
.dev = {
% F+ |. }! x2 e; j .platform_data = &da850_evm_tl_leds_pdata,7 [- C7 l! T, [
.release = led_dev_release,
& s5 f/ n; K! @- T }. o1 E8 [! S$ Q
};
. s- T% q4 a1 j9 I, d- l6 h0 i/ _* r* U2 X. `& J/ _
static int __init led_platform_init(void)( G8 b, C3 f/ \- o. y4 w
{; Q3 K) k9 R8 v: T$ n8 w
int ret;/ t3 e; w: ?; k1 P+ w
#if 0
' W6 I( g J! F# c ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& U7 W ^( l9 e( A if (ret)8 |. i9 f# k+ @3 K
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# }( O0 P; Q+ \9 j8 c: W3 f
"%d\n", ret);, v! z: F ~6 H
#endif
3 Q5 F1 Z4 C0 a ret = platform_device_register(&da850_evm_tl_leds_device);! T, b+ e& }+ r( r7 |' e9 @- _& Q
if (ret)
' s$ v" J9 Q: C' K+ i, [ pr_warning("Could not register som GPIO expander LEDS");
$ {3 r5 m/ U7 h/ s else
( B" L3 R- u! K* w# N printk(KERN_INFO "LED register sucessful!\n");* U* r. V* U8 C* b8 f% }
/ Z$ C) }* `" T' |$ I1 k7 O return ret;
, q: \0 ?/ Y( t, [}' r% V2 R8 ?; }' H) k
& N! |* M; q p' W! ]/ T+ Fstatic void __exit led_platform_exit(void)
' K. ]0 P" j0 b: a0 o0 y{
- h( J1 P( { | platform_device_unregister(&da850_evm_tl_leds_device);- V/ \# p' ]* ]7 L3 M) J
3 B) ]5 ^- i7 e
printk(KERN_INFO "LED unregister!\n");. P r3 K3 u5 ?8 O
}& j/ V8 l3 z" S1 K
! {/ l7 F; } E0 w& j# w8 Q
module_init(led_platform_init);( K, A O( ^$ L6 Y
module_exit(led_platform_exit);) T9 R2 w5 U7 {+ P4 O) |7 G- X+ |
! A; ]! k* T1 a& J' F1 c, s( o5 n) _MODULE_DESCRIPTION("Led platform driver");
" ?9 s; L- f/ h) o5 T# J2 s7 W$ NMODULE_AUTHOR("Tronlong");- J7 K7 c1 I2 f5 @: l
MODULE_LICENSE("GPL");- A) G' D, ~2 M
' _1 y- c' A2 `5 a
|
|