|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 s. S$ y- @: ?+ G2 K
#include <linux/init.h>3 u: H# ~7 p) L( y$ k- {" E
#include <linux/module.h>2 F/ y+ W+ F1 j. n' I
#include <linux/kernel.h>' K# N2 ^7 R! O0 A
#include <linux/types.h>
2 N3 \( H+ R1 r! {& D3 ~#include <linux/gpio.h>% A% W3 g8 {# [% q( h
#include <linux/leds.h>
4 x- I8 V5 Q4 d& k. L3 c6 B! c#include <linux/platform_device.h>4 u) i' x( l; c- j" E9 T# L
i: y. z1 f. `! P- I' ]#include <asm/mach-types.h>
6 f P, ~0 G# H3 t/ k#include <asm/mach/arch.h>/ {+ S0 m5 g0 w C8 Q
#include <mach/da8xx.h>1 o. S0 X3 _3 A7 f/ T* _
#include <mach/mux.h>( B+ {6 i* [9 A$ g
0 D* {! J# G6 g8 L. Z/ L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& B! F: ~' [6 O4 |6 q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) J( [4 ]2 b+ h! J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 u ?* w" { X5 i2 H#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* x; u% Z, T9 C
& n9 K/ G) a4 R0 f* @/* assign the tl som board LED-GPIOs*/
. l0 ~& r3 p: c5 astatic const short da850_evm_tl_user_led_pins[] = {0 e4 B2 g8 ^ F% [
/* These pins are definition at <mach/mux.h> file */6 `' w$ H, j6 {( t4 ^
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! v3 W- H/ \, f/ D5 j0 `! r
-1
3 h" G0 }: U4 s2 X: ?- Q3 V6 q0 h};7 r# p A, S$ @+ |' b" R
; Y( E# [0 F$ p4 O/ O
static struct gpio_led da850_evm_tl_leds[] = {' _# y" d3 t2 c
{% G) x8 I: ^+ W6 n' T
.active_low = 0," O3 @& i1 c, O/ W
.gpio = DA850_USER_LED0," Y1 t, U r% k/ N* u2 h) J
.name = "user_led0",0 a( f; ?, Q: t: S, y- Q, q+ w1 S; E; C
.default_trigger = "default-on",
; S J/ k- W. q& T% W8 m0 i% b },, g6 t! }* Q2 B& a/ a
{
: y5 n# i. r; P .active_low = 0,
6 d; b( y* D; R( e/ F3 |$ ~7 e# a( F .gpio = DA850_USER_LED1,
$ T4 R7 Y& }8 o2 \ .name = "user_led1",4 i8 v( S7 P2 ?6 O( E. ?
.default_trigger = "default-on",2 G2 s( O& I8 b* V8 M
},1 W S4 N+ ` u7 V6 q+ K
{
! E4 C3 v& u8 _' Y5 ~7 t .active_low = 0,/ @7 i+ v y! S8 m
.gpio = DA850_USER_LED2,; }0 d6 n: ^) d% c }; i9 @4 k
.name = "user_led2",
. k0 V) k5 g7 Z .default_trigger = "default-on",7 X+ a6 G, n) Y( c+ _" Z
},# k) } V) T. y5 G5 D
{, |* f5 w% h+ ]0 F
.active_low = 0,3 B. _% L% a0 K3 ?# H
.gpio = DA850_USER_LED3,
5 o! J$ r5 s/ k# M0 @% A .name = "user_led3",
& S2 N f. i* x+ i$ d6 x3 d- g .default_trigger = "default-on",$ u0 J9 E% G2 E$ x/ n( u( M9 _
},
: S6 I6 @% N6 Q- x};
& [6 _9 O2 _# g" c) j$ B9 k1 U* L: ]. ~3 b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 u f8 u5 o2 \/ ^ .leds = da850_evm_tl_leds,
/ j( Y$ ]7 P# _) d+ l% d .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; n5 j) j% i x+ V/ v};
* b% d6 {# V$ ~3 H4 L4 X
" ~; I% B+ a, P& M4 [& P1 wstatic void led_dev_release(struct device *dev)
S9 H# |8 M+ `+ V* B& M& c{: |0 `* }& W" j: d/ E+ i3 p
};: S$ L' i2 r( w1 S
5 v8 }9 O% G- B* X: L+ F- ]static struct platform_device da850_evm_tl_leds_device = {; p4 K9 r# A$ P
.name = "leds-gpio",
8 ~ W( w! q# V$ v .id = 1,* p) w; u; @5 F
.dev = {, b; t8 d# Q; H3 x% ^5 W, e. X
.platform_data = &da850_evm_tl_leds_pdata,' v' r0 E2 \5 P- S4 @& b# r% W' Z
.release = led_dev_release,& D; p9 x( c( ^0 j
}
; J" Q! o/ Y6 D6 R};6 S3 W P! e, e w
# e8 }& c# G; Estatic int __init led_platform_init(void). v, I/ I, n U3 [* e0 {) ]
{* v+ ~# B n7 b' a
int ret;7 I1 N* l+ {% t) h4 _/ |: q
#if 0
7 p Y, ]) g! t8 j# p ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# n' n. E( x4 s
if (ret)
5 s, f; C, a4 D; Q+ I7 d/ k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 `! p" j$ V" {+ [ "%d\n", ret);' M8 o& f$ d7 C. v: x
#endif
' y: x) w! T$ `7 ^2 \. e ret = platform_device_register(&da850_evm_tl_leds_device);* S$ y, |& X9 o* l4 d# N
if (ret)" _, v3 H" e, L8 h' @% j0 O$ B
pr_warning("Could not register som GPIO expander LEDS");% h6 g8 P7 e3 H7 j# q( Z# X: Q/ @
else
* E( O$ d- `' E; F& Q# [ printk(KERN_INFO "LED register sucessful!\n");. B9 X( ?" [! v$ m- m2 F
" x- b. H7 |, F. b return ret;$ X! q' L" A$ F
}
; h- y: _: r" v6 r) X& Q% s6 |( l$ q+ Q8 \- G& c7 c) |2 i& ], i9 A
static void __exit led_platform_exit(void)
$ ?( z* C, B9 [2 y{
9 c+ O/ [# m5 v0 ]: W platform_device_unregister(&da850_evm_tl_leds_device);( y+ G2 d$ x4 p/ T d1 @9 ]- Q
4 t3 ]; h6 ]3 Q. ?2 H printk(KERN_INFO "LED unregister!\n");, p3 n& a* v/ `2 ]- o
}
8 x9 G( g, m# P" h$ _6 V- I% \- n; u$ r
module_init(led_platform_init);, W0 Y! Y0 e; A( k0 V6 U* n
module_exit(led_platform_exit);/ P( Q% d9 t& L7 h2 c' y
[$ R. {; d2 j+ Y2 mMODULE_DESCRIPTION("Led platform driver");7 i7 u7 S9 D. i9 w
MODULE_AUTHOR("Tronlong");- b% V% W2 g; C* _2 Q. N9 O
MODULE_LICENSE("GPL");
" Q7 [ t. t' j: y7 C1 N( G! o4 Q5 j7 M" S' T6 B" a
|
|