|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* ?' l8 n. n E3 d8 ?( i0 k
#include <linux/init.h>* S3 |! k, x$ }# I' a( R8 g' @
#include <linux/module.h>
% b5 g# R! `4 G3 k- _#include <linux/kernel.h># Y, x$ S# b1 z0 F }, v$ B
#include <linux/types.h>1 ]) W9 j/ B8 X: C/ V; [
#include <linux/gpio.h>3 q) }' i* R; d7 u* Z/ Y
#include <linux/leds.h>! S* e! D: M5 f; r' k& [
#include <linux/platform_device.h>
6 C% m5 a1 q& \- R( u, ^! f+ `
; {; {* E2 b H: z9 Y: q: O#include <asm/mach-types.h>
) a( r% ?7 e- k# E#include <asm/mach/arch.h>
9 t2 c! v5 d$ E1 R' G6 ~) ]#include <mach/da8xx.h>
. z! q1 X7 Y# }# F% O#include <mach/mux.h>/ U D7 k6 n* h {7 ^. C" S/ ~( R
9 m& a& F( b3 l$ P& @
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ H8 b1 Q$ ~% q8 Z* J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 H V7 t3 p9 a* ^7 m! a9 {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 O3 b& c3 H- z& E' K8 K. p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ j6 W" ]- A/ q) P7 {, m& [* U. {
2 }0 x8 r& M) z- l: I' h" c/* assign the tl som board LED-GPIOs*/ X$ q9 u E. M# G
static const short da850_evm_tl_user_led_pins[] = {
9 J& ^& S; z1 R Z /* These pins are definition at <mach/mux.h> file */' T2 u, Z1 A& R' b, d, `5 }# i$ e
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 W7 L7 T0 u( Z) ~1 \# P, |) L -11 W: i# t! p- y
};
& T# E! ?; O9 ]$ q( G
; V5 h; b5 y* B, K: qstatic struct gpio_led da850_evm_tl_leds[] = {- ^" v1 @+ z& z7 |. W
{
5 v/ s9 P( Z! j9 t, e6 g .active_low = 0,8 U+ @9 z m# k4 E
.gpio = DA850_USER_LED0,
6 O( b3 j* h4 M. }4 V .name = "user_led0",2 j' X7 I* L4 j8 \
.default_trigger = "default-on",
1 P6 B- S$ v! ~! w3 X6 q }," ]; Z) m) H- N' y/ F
{
: u, M% k+ p8 r- H; A* j6 d2 q .active_low = 0,
5 P0 a8 }' ?6 b( Q .gpio = DA850_USER_LED1,& _1 l( b; b: |8 V/ t" G( i
.name = "user_led1",6 b. U! K$ T1 }6 j$ J; k
.default_trigger = "default-on",
5 [- F& F2 k; O },
5 I" s5 F5 u4 d' X2 O s- Q+ L {; K) M+ Z$ _( ^6 [% g0 H$ S, B
.active_low = 0,( |. m$ T# P) ~# s4 Y
.gpio = DA850_USER_LED2,
/ z8 [/ K* V* ^0 l( b .name = "user_led2",
, C* ~' J5 q+ h. o .default_trigger = "default-on",
. U+ M O; a9 ` x },
* h# j. L- R; s0 P$ ]* q7 A. N { k3 X( k6 v- {# ?" ]7 j. S% r
.active_low = 0,& b) ?: L& `) l3 r7 p
.gpio = DA850_USER_LED3,) k/ g# ^* b8 w+ S6 ?& | O
.name = "user_led3",
6 T; m# I; G! ~4 X9 J; p1 [" r7 f .default_trigger = "default-on",) Z! g5 A( ^) }2 E9 L8 E3 `
},
. k( o5 a2 ~/ Z7 I: k};0 q' u6 `- k( i3 J* N3 L4 \) h T% m
: b/ j8 ~7 R, f' n! Z9 Xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ g. C( V1 a! B& ` .leds = da850_evm_tl_leds,2 G' X7 ?3 a1 E0 e O8 s) z& _
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 c2 I9 F, @0 G! Q$ V' c+ ?};! H7 p1 R M# }6 L7 ?; r
2 d5 Z, }) z% ~; R, cstatic void led_dev_release(struct device *dev)
2 J D- L( p, h3 J. E7 ^* c{6 a0 w6 M& [5 f4 ?% W- o
};
# D8 n2 q: f. z2 I
% k9 F' `% U( _0 l9 h3 U9 m$ xstatic struct platform_device da850_evm_tl_leds_device = {3 B o2 z( r$ y( L
.name = "leds-gpio",. u4 P5 D9 N0 F" e6 i& ?
.id = 1,7 M9 w2 L6 B6 R# P! e+ C
.dev = {1 C8 o2 B9 d# Q4 Y
.platform_data = &da850_evm_tl_leds_pdata,
9 a$ L. f6 W: N0 J' H! i+ R .release = led_dev_release,- d6 H: U0 ~+ u+ x
}
. E2 X" }, j, K& e};" q( v% O" F: e" y9 Q9 y
0 v/ d0 L* t1 ^! T7 T" X, T1 _
static int __init led_platform_init(void)
& {1 i) S7 B5 e; v5 l{
1 S' z& g Q3 ` int ret;
+ Q9 {* B, T0 n) n#if 01 n' Z5 \ F* W
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" G6 ?1 W- x+ l& @, L& j1 v9 e if (ret)
# M/ C Q7 J* Q/ A6 [% F9 @- ?2 K pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 ]8 J$ A) V6 y! F! H7 m7 Y1 \ "%d\n", ret);( s! n+ z5 ~9 R5 D0 n
#endif/ }) L6 v( D& {# F* C/ A) J0 Z$ ?
ret = platform_device_register(&da850_evm_tl_leds_device);
* \* F0 \' W! T6 Q1 A: \ if (ret)
& W {9 Y. u1 ^8 d0 J pr_warning("Could not register som GPIO expander LEDS");
# P" p7 P8 z" I2 V" ^8 w else
' j0 A; U3 s9 O0 t+ M2 s0 d3 i printk(KERN_INFO "LED register sucessful!\n");* P% ^3 k& O8 p6 V a
# R1 S$ |. g& W- T
return ret;
% B W# q' B% Z4 ^/ d9 r}
0 H2 w- E+ [2 P# Q9 x7 m7 y1 \ A/ a# F# a; ^
static void __exit led_platform_exit(void)
5 X- b4 o7 }7 D! [1 @{
7 u) l: |/ b. N4 Q: x platform_device_unregister(&da850_evm_tl_leds_device);
9 W v- Z% e, T7 Z: Q# v' M& A1 s+ _% O$ b" Y/ P2 }4 K: r
printk(KERN_INFO "LED unregister!\n");' U& B3 o% h* c. M
}3 q3 f# \* q$ z" E# i, M! C# `+ s
9 N# e9 ]6 X: G7 D* Jmodule_init(led_platform_init);
4 N( q( F9 \; L- P5 H) F. tmodule_exit(led_platform_exit);
, Z1 b9 K4 c0 P) G. o/ W
# R$ P* B; B! G5 LMODULE_DESCRIPTION("Led platform driver");
, w5 Q0 D" u7 C+ [7 u+ HMODULE_AUTHOR("Tronlong");
) ?( o$ |3 B9 e3 YMODULE_LICENSE("GPL");
7 D4 i, a( B0 Y; P+ p" a Y( n
; r" ^: K2 ]/ n' ~! X2 |8 { |
|