|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) M6 \$ F) |7 D: v# O" N
#include <linux/init.h>3 {7 @* h* y, W7 v' j
#include <linux/module.h>
" T- [' i& {5 s#include <linux/kernel.h>
1 S; v, T' j/ e#include <linux/types.h>5 l! T. E- n, ~0 P' k4 d
#include <linux/gpio.h>
' V% L/ L( M) ~2 V% J#include <linux/leds.h>
) G I6 K2 A+ _+ P/ `, o v; u1 i8 R#include <linux/platform_device.h># H; r( D8 K3 e, G
- ]* F) t z. P1 v3 f7 b# p
#include <asm/mach-types.h>0 ?+ X. v$ W+ R# `# P3 p
#include <asm/mach/arch.h>
4 ?& w8 Z. t- C& v#include <mach/da8xx.h>7 w* a5 Y! Q& Y
#include <mach/mux.h>; i1 t8 h* t, T$ _& \' G) w& q
* t8 u: H4 v1 L- g, ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); I, K% ` L x I3 t
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 Y- _7 y4 \0 d& b7 n2 ]! T& ~8 q/ k- e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 m5 [5 h: T4 k; a/ L- e1 @: g! E6 _ q: ?
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 n7 Q. o) |4 M7 z4 d7 C0 A' k0 i9 Q( L4 _, V, }
/* assign the tl som board LED-GPIOs*/
. L0 E' ]$ m5 e; A3 Nstatic const short da850_evm_tl_user_led_pins[] = {
2 O4 V3 I1 a) r' [ /* These pins are definition at <mach/mux.h> file */
. c/ e/ p4 h/ ^+ U! e$ O5 F" U' d9 F DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* ]0 `5 R2 }# r% c( V# O: m+ ~/ k, V
-1
5 L) s3 Z( i ?# |# ]3 ~" Q};
9 z: S, }: F: h! ]$ _& V/ _9 d8 }5 l. t1 C; t Y
static struct gpio_led da850_evm_tl_leds[] = {8 w( u% J' y7 V) Z* T [# p1 j( i
{
9 o! `4 z5 E( d5 ]5 ^. o5 [ .active_low = 0,5 Q' s4 z' V! A
.gpio = DA850_USER_LED0,# c: C7 f" v0 p( X, r
.name = "user_led0",+ P5 K3 Q c5 \/ U: q4 L: I
.default_trigger = "default-on",& z8 O+ B& x1 x
},
6 `: {) q2 s! a1 s! G- j {
% a9 A4 I6 R( H6 v .active_low = 0,
' M g6 O! H( d2 C" Y7 E! H .gpio = DA850_USER_LED1,2 s. l/ e1 J; i1 B: o6 Q
.name = "user_led1",
0 v0 D( f1 X/ l& L2 x .default_trigger = "default-on",
) V' ?* z' ]2 @% R3 a% G1 T },+ G4 b- i' c3 P, p# k! j. ~% k
{+ ?5 u5 l9 V# i H- U8 P
.active_low = 0,, o% q1 n- |! ], I
.gpio = DA850_USER_LED2,4 d5 ? g4 Q9 n8 g ~. t
.name = "user_led2",
; Z( h( R" U$ g, p6 a .default_trigger = "default-on",) ~. Y0 H, b2 O
},
) @0 v$ ]: b5 [5 K J {0 H& w, j0 B, C( U Q& [+ W6 H
.active_low = 0,* y8 b$ ]" Z( ~1 P6 [2 q i+ e8 o
.gpio = DA850_USER_LED3,
- u! K8 W# b5 {' }6 l7 `7 h. Z5 v4 X .name = "user_led3"," q3 ~2 u R! r! C
.default_trigger = "default-on",; C6 R1 U/ c5 O
},2 |1 m4 j/ L2 n0 k, `
};9 p7 m: H4 I6 ]8 G# A( S
9 J( N" {$ Y/ n$ ?: _/ p8 M+ ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. y% w) B" l* b .leds = da850_evm_tl_leds,
; z4 u7 T3 [& Q- M9 _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) A% ?- {2 {) Y6 J) F};0 j7 n- R3 q# y/ H" J9 b" ]
) l# n2 g( M' @+ H0 k- t
static void led_dev_release(struct device *dev)) j! T/ t* e3 G8 k; A# x. X
{' Y n1 h. u2 C
};
p! `0 E; b% l' D% L g4 U2 _* i+ z* l, k( H$ V R7 p9 ]4 r
static struct platform_device da850_evm_tl_leds_device = {( w1 H2 e# d4 x& V4 u$ ~
.name = "leds-gpio",
7 J& q P& x) L4 A .id = 1,0 B( o' I( \1 R3 V
.dev = {
0 S+ J# x5 Z0 p6 S& O; I. h .platform_data = &da850_evm_tl_leds_pdata," i' E. S6 Y: p6 U7 ]+ E* M
.release = led_dev_release,
- O, A9 d9 c: o% D }2 O% r( V( S7 z- \1 |( {) |; t
};
5 m& [7 J' ]3 k! z7 i7 g/ g9 U! ?" u
static int __init led_platform_init(void)
1 K/ j/ @: M/ C* P{
+ W: `3 l; A @$ Z5 W/ w0 y* B int ret;
. b6 m0 Q' K$ L1 ]+ }$ L#if 0
/ c% v& I9 X$ ]0 u( x' F$ S p ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( Q2 ]* i7 E: X" e- U6 {
if (ret)
; b# Y- d N' l pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 s- g2 C' v' u! n, I
"%d\n", ret);$ f% n9 H" c: C
#endif
# d6 Y- b9 v. {7 L. _5 |. r ret = platform_device_register(&da850_evm_tl_leds_device);7 r3 X# v! z6 c# g& f. S0 P
if (ret)( ^2 _, ^0 P4 y2 q( p
pr_warning("Could not register som GPIO expander LEDS");
) H4 b* \' @1 ^; T% [* b else
4 L: H3 {5 u8 s& P- s0 w printk(KERN_INFO "LED register sucessful!\n");
5 ^6 N# ^2 n' i+ F
! \ e9 ], [5 ~2 K return ret;: S1 n5 V3 F. a) E$ I9 ]/ P
}: W* ~" g1 V, b& f
S' z8 s$ [) _static void __exit led_platform_exit(void)1 A3 y" m8 E0 j# ]
{, B3 _, l* e: V2 u9 i c J
platform_device_unregister(&da850_evm_tl_leds_device);
2 f+ c+ y" |% v( E! X. _3 N+ u2 F$ N* ~: S
printk(KERN_INFO "LED unregister!\n");- l' b* }* `, N: ^! c) i" z
}0 j! u% B# {5 o9 ~- c
8 _8 z2 {1 ~( c' a) _6 O* C% V
module_init(led_platform_init);8 D0 a, n+ d0 Z# [
module_exit(led_platform_exit);
m r4 ^7 i7 s. J; ~ q6 T4 [& N% X6 ~0 I8 n \2 j8 u1 w, t9 a j7 @
MODULE_DESCRIPTION("Led platform driver");
4 ?) \8 e. a$ w7 U8 dMODULE_AUTHOR("Tronlong");
" v! y* ^2 G' ^$ w5 EMODULE_LICENSE("GPL");
+ o6 d: B0 l0 |# f3 a, c5 |0 U, ]$ S( h# m% s7 r/ n2 I) f
|
|