|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' p6 D* O! M7 Q, ?$ A, Y#include <linux/init.h>9 x. H+ z: E. G
#include <linux/module.h>
1 J8 L. ?5 t/ l) r) P. c" M: u0 w#include <linux/kernel.h>" l2 N9 {0 t2 Z' r
#include <linux/types.h>
* X* \% J4 y$ x! N+ c- w4 g/ x#include <linux/gpio.h>
+ n% j: V& P9 b8 r2 Y4 l" K# s#include <linux/leds.h>
q. O _4 m( M5 l7 w& `#include <linux/platform_device.h>0 c7 @5 W' s/ R/ f5 m6 e# h h1 w
) J# O+ s: q3 H
#include <asm/mach-types.h>
% ~/ p8 D/ `" h+ Z& \0 U#include <asm/mach/arch.h>
* |1 w2 C7 G8 L- T g" i; \ U#include <mach/da8xx.h>
- f: q$ ^: k% h+ f) ]9 C#include <mach/mux.h>6 ~; `/ `1 U% g' O: t( M
3 O0 E8 l+ S9 l, i g- f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( D' x# p6 ^* ?8 I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 K4 }1 k0 t' z! s
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
\$ Z- F1 B8 I \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: m9 @! k6 K% G/ W( H
+ k+ c9 f& n: W3 h6 a+ i/ w/* assign the tl som board LED-GPIOs*/; s: N$ m5 s/ F7 N' L
static const short da850_evm_tl_user_led_pins[] = {
; P1 A! W. b$ W X4 Y& m7 w# d /* These pins are definition at <mach/mux.h> file */
$ g3 I% q# P1 i& T! D DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; O$ m6 u- N: o0 V3 K
-1
' O4 u) q* h) l6 x};
: n& u4 s' @9 l$ v3 |+ l* Z4 r+ o$ X$ N$ n1 P4 H' V& ?. Y8 i
static struct gpio_led da850_evm_tl_leds[] = {: K$ T O! c+ [* @
{" e/ H2 R; P) Z6 c1 ?
.active_low = 0,# I* W& z e" `6 C
.gpio = DA850_USER_LED0,
: [5 j/ Z! R' c8 O) y6 v .name = "user_led0",
5 C' h+ J( H1 r! r! O. D; G, d6 B2 B .default_trigger = "default-on",
! V6 e p. f5 A& H# H* |' k$ G },
* p/ ]; r3 z( [- ~5 s% J3 L3 G {9 E/ O5 t! I0 z9 j
.active_low = 0,: }& s. R b9 K3 H$ y
.gpio = DA850_USER_LED1,
! [. Z; y$ z Z2 J .name = "user_led1",( W! Y) c0 z- H, O1 \
.default_trigger = "default-on",
8 x2 D1 H6 H; y },
* Z+ {& `( s" k# P {9 ?" e: K! _( n! i% }5 h
.active_low = 0,
) R+ S1 x! I- V0 y3 H# { .gpio = DA850_USER_LED2,
- s. t" D$ m7 b7 F3 g .name = "user_led2",
8 V& z! F$ W: a9 |/ t' M3 u .default_trigger = "default-on",
. `' d6 J% T+ N; S# [ },2 @: h5 F: U" t% c3 g1 S
{# t2 Y, V5 d' |, M. Y! T
.active_low = 0,6 N& {. F: \% Z/ p# q. U
.gpio = DA850_USER_LED3,* z' x# W2 E( O8 a: y8 z
.name = "user_led3",
' B0 ?7 v! w) ` .default_trigger = "default-on",3 X$ b- x; G/ e9 T$ r' q
},6 d5 }& @' G1 ]
};$ p o: T- k7 K; @9 y
- ]' {( i. y" |: U
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ D2 }/ w3 ^) m, I& p
.leds = da850_evm_tl_leds,# V) J4 f% X1 J' a! O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 r z O( q; e0 i3 m};6 j; N4 s) ]+ E' f( |) n
" G9 M+ P9 M8 D* L$ j& Hstatic void led_dev_release(struct device *dev)
" h2 |2 t7 p6 p* D+ y{$ ? V& ^* A/ M& H# l/ X) {
};
2 `8 g6 T4 @2 ~+ K; I4 l& p& Q0 U+ j: `9 {* ?
static struct platform_device da850_evm_tl_leds_device = {
: P# _! g& B$ Y, k3 ] .name = "leds-gpio",8 |8 O0 F5 M7 _; P2 Y' w' ^7 E4 ~
.id = 1,
! V9 [7 s" c0 L0 p .dev = {+ c& q( x* X' O1 C8 A; T
.platform_data = &da850_evm_tl_leds_pdata,
. u6 {! }$ M: e8 V .release = led_dev_release,6 ?' _( c; G- S0 x+ k8 Z# F3 J4 y. k
}
3 x7 z: d$ s- ]' d};/ D L$ j7 K* d% T/ g
' }8 d/ V. q. }; n' \% y
static int __init led_platform_init(void)
& t; [. ?! B8 @0 P{
4 c* Q- Y4 T+ O; W+ ] f7 c+ l int ret;& Y# i, C1 V. g7 i3 u x* s
#if 0
3 Y* p. }2 i: z- i ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 \. _$ W: F. L5 v4 d
if (ret)% s5 B" m6 h: x/ f8 D/ |( a
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 V# x! e# L( K$ x( j3 |3 @) f1 _4 L
"%d\n", ret);- g, t, F; d& G+ ]
#endif
L+ U! E# S- ~. E9 c% D% a5 E ret = platform_device_register(&da850_evm_tl_leds_device);
8 y0 k* l# G; P/ k3 I% u) [ if (ret)
/ K2 a {- t5 o Y+ e4 O9 J pr_warning("Could not register som GPIO expander LEDS");3 Q/ a: z. E% Q% \
else
: q/ s$ b% u9 v/ b8 @5 B5 } printk(KERN_INFO "LED register sucessful!\n");5 H8 {' G" | s) h b8 I! p. ?/ y
9 m% e$ }6 e" e% X
return ret;
1 L" g6 `" A6 R! p$ e}7 U5 I) U- ` K1 C$ t" y" z
; |' r! n9 o! r X
static void __exit led_platform_exit(void)/ B) v- X3 d% z! v* y8 \
{* _3 H6 b9 r1 h; M% O
platform_device_unregister(&da850_evm_tl_leds_device);
0 K! z! O( ?1 {1 N3 q/ v8 s% ~, r8 k# z) _; W
printk(KERN_INFO "LED unregister!\n");
1 x1 S) f+ L- M) s6 [! s! e* j}
/ p5 [' K" l, ~, l( n, J! E$ y& s$ N
module_init(led_platform_init);1 Y1 K; `, y# P+ H
module_exit(led_platform_exit);" x x( ?0 K8 y. p
, V' o: U2 t4 pMODULE_DESCRIPTION("Led platform driver");3 \: N4 i: E! x
MODULE_AUTHOR("Tronlong");7 m1 v) L& R; ~, n( x& e% Q
MODULE_LICENSE("GPL");$ v) |+ Z' C4 m7 J' F8 h. ]
. g# ^! z0 E4 s) e5 C2 b, a8 W |
|