|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 y( t; M+ O. e. D( v* P
#include <linux/init.h>3 H9 l2 Y. ?% w1 [
#include <linux/module.h>- s0 _- x4 |# O1 n D
#include <linux/kernel.h>
) d- @2 S) \+ h* S#include <linux/types.h>- w6 k$ Y0 a. a+ E8 U! S- l
#include <linux/gpio.h>
4 j# Y- V2 g- R x* d o#include <linux/leds.h>3 h4 j8 V. H; i+ m
#include <linux/platform_device.h># @& T. o) D `7 [
/ j4 _( f9 v; X2 C" Y" Q#include <asm/mach-types.h>
% ]4 i" w7 g5 m8 ^6 `" N% E, x#include <asm/mach/arch.h>
" Q3 l9 y+ t% j+ @! k#include <mach/da8xx.h>
5 ~# @! b2 @7 l#include <mach/mux.h>9 ^6 u1 _! [- N6 H, h" Z
& C6 @" t( F1 B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- Y; x# n0 {( [! T+ \ [1 @; }4 r; a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- b$ Y& ` P, e; }( R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 W3 f7 d+ z" |) n#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) e6 _; V, ^# Q. P! E# [1 t/ n$ e- |
/* assign the tl som board LED-GPIOs*/) }' k: N! K! |0 u
static const short da850_evm_tl_user_led_pins[] = {
+ c& T0 Y* ]/ {1 ~ /* These pins are definition at <mach/mux.h> file */$ }) k+ Y1 K4 V( B
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 T6 w$ k$ g2 V -1
" G6 |: L0 [ e* b, U};
/ \$ W$ |1 y. i7 J! F$ ]! }
3 Z+ v4 h4 t5 {8 n' x+ h3 ^static struct gpio_led da850_evm_tl_leds[] = {! q+ a5 t4 w9 T" H
{
9 b5 b$ o e; h, [& q9 j .active_low = 0,. b2 u4 O! ?4 Y* K2 M9 C1 s5 U% |
.gpio = DA850_USER_LED0,
. s6 A- W& Z4 C# \5 o9 [! R .name = "user_led0",
5 c% M- M, h& s j$ H .default_trigger = "default-on",. @2 r4 o/ ?) f# i. g; g
},
! ~# e, l- s" P3 @7 h Z' D0 d+ q {
# T* f% j: E4 Y& k# k9 k .active_low = 0,& [+ ^& O' p& f$ q+ T& K+ P, n
.gpio = DA850_USER_LED1,
% h! t0 o* Z3 t* \1 D' I# O .name = "user_led1",
; N: o0 P$ {& `) i9 z5 D .default_trigger = "default-on",
) }; [* `& u4 Y( W: c },3 d/ z- b6 i: {7 b! j2 k1 ~7 t! X9 n
{
! T" F' ]6 I& d! Z( \ .active_low = 0,
. d0 _1 l" y# D .gpio = DA850_USER_LED2," o, Y" N6 N O* b
.name = "user_led2",8 c3 D! ] h1 }) e- S0 M
.default_trigger = "default-on",
1 r+ N# c! A4 A( o& s9 ? },
: E5 D* I$ S1 k {# m! w- i, x- y `, F* }
.active_low = 0,0 B: V' {( M4 e3 o
.gpio = DA850_USER_LED3,* w: r0 a9 w# u# G2 O
.name = "user_led3",: c, {( b; ?* t0 ^, @
.default_trigger = "default-on",
% X8 E: d: `0 ]5 q# t" R9 g },
* a; [" g# }0 ~0 y6 b3 C) |, A};
, m6 Y4 l1 S$ a: S4 {" z" Y( r$ h5 @9 M4 _4 L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- k: a) e2 B. F+ n0 b .leds = da850_evm_tl_leds,
$ `! k C8 g! |* n" @0 i s .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 B5 q/ D' `% [. Q' G y
};0 x3 o7 q" j6 v7 |# \
4 B o/ O6 v# A& w6 Zstatic void led_dev_release(struct device *dev)
3 k- F) b- j- P3 f/ T$ j{. n8 `! S3 k3 M
};
; O. a' p. s/ p2 n6 {2 ~! E( r
# H, ~4 |6 D; o) X' @, g2 x/ p0 nstatic struct platform_device da850_evm_tl_leds_device = {
% U' F! Q/ O* y# h" G6 c; N .name = "leds-gpio",. Q6 f" P3 v( j2 N# [3 Q& h. j
.id = 1,# T- j" Y1 U6 g" `
.dev = {
( ^% S2 x* r* u+ x; u .platform_data = &da850_evm_tl_leds_pdata,
6 X1 [$ z9 m' b" i0 E& p$ {( t .release = led_dev_release,
$ a* j# ~0 i/ d2 z, Z" J }* z- I" J; c$ v( i0 [
};
9 B& i5 E/ d9 k0 Q4 y9 V$ p$ n4 m: Z
static int __init led_platform_init(void)7 Q( w- g! Y1 V/ L
{1 ~5 @ ~5 S4 y* b2 o& o8 L# y& L
int ret;, R: @0 c+ m7 {% L$ V: L8 Q
#if 02 v+ F' P$ O. q7 a2 ^) d4 c
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% @" H: X# S4 S3 f1 {# T if (ret)$ x& k' h" h0 y% D& ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 d; s! [1 y; e* Y "%d\n", ret);4 [/ B9 t: [& w
#endif( O, E- [% l2 ]' N' @3 N3 i; p# M
ret = platform_device_register(&da850_evm_tl_leds_device);
& L+ Q: D3 }6 l9 J if (ret)
3 e, Z( P g$ f4 d' p6 W pr_warning("Could not register som GPIO expander LEDS");/ d ^1 _9 e* r( B- y
else
# b, T% H/ A; }, `# @" N9 E printk(KERN_INFO "LED register sucessful!\n");
* d; y7 O5 {7 p! n8 ]# ^8 h3 R- Z6 N$ z
return ret;' {7 F# W x1 z# f' U0 q, @1 A
}5 A* P2 c3 ~. g) H* U4 P% {
) e* u# X, g- S: `- u. u
static void __exit led_platform_exit(void)
* P- @6 {5 q: [/ g* p! l{3 {) O) d3 v; B# @
platform_device_unregister(&da850_evm_tl_leds_device);
( r6 h5 L$ ^7 N& e1 K9 q. M4 \# H
' d2 c0 Z/ ?; S printk(KERN_INFO "LED unregister!\n");/ |. C) m A7 S! J r
}( o/ Z. I! Y# u
( P7 A4 U; c2 i6 f/ \module_init(led_platform_init);
+ X1 ^4 p4 I& R- _, r6 ~, Rmodule_exit(led_platform_exit);2 a9 ^$ D$ \2 D- o7 T5 V( k, s/ V
7 q1 a2 B0 W4 N4 Q6 ~MODULE_DESCRIPTION("Led platform driver");3 _5 V: D( B4 L. v' G
MODULE_AUTHOR("Tronlong");( Q0 U: M( K( r: {
MODULE_LICENSE("GPL");3 T& F# F/ v' }& d9 c
) X# W% T- l c# w4 j5 F
|
|