|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 f! ?; I1 I4 j+ i0 Q* W
#include <linux/init.h>
7 f; E6 d, o0 P# y- r6 U; v3 F, s#include <linux/module.h>
" {* ]! w) @. t#include <linux/kernel.h>5 W. D8 y" g2 X% [9 s
#include <linux/types.h>
. b) u! X: {$ C0 ?8 J3 u4 G#include <linux/gpio.h>
! L( E) K" Z/ h7 _- c+ Q8 _6 S5 J#include <linux/leds.h> n3 ^9 G w0 u! j$ w) |
#include <linux/platform_device.h>
7 q8 I0 a/ C, D% J3 L! G3 o/ A+ X5 X6 L% S- O
#include <asm/mach-types.h>! G+ l5 J$ ]$ D* H9 S; X2 ^
#include <asm/mach/arch.h>
+ _& l4 x' z+ H" G9 k) R: K' }#include <mach/da8xx.h>7 A {1 Y/ b$ x- z; [. W3 Y# l
#include <mach/mux.h>
0 e' _: Z& d5 N; |2 A2 I8 U& o# l+ p5 G4 ^" O
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ t+ h$ b2 e! H/ T# Z! w
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ d4 W4 O7 k& ]4 i1 n* K8 ^9 _$ v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 ^7 @: M! @( c0 [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 I1 e* U/ O# T7 m z0 p6 N+ g
7 X0 A+ R2 D# _- H/* assign the tl som board LED-GPIOs*/* R2 K, Y$ ` `6 \! X! m
static const short da850_evm_tl_user_led_pins[] = {/ J3 i, ~" {; M/ x- D
/* These pins are definition at <mach/mux.h> file */
3 z! a+ w4 f; X& E2 ~% r- ?* ~/ e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. V$ g; Z( G$ I. A, A' @' f -1
. |) f6 ` y, ~) v. S; R};
; `6 w4 k r: N# O, s4 Z8 D
- y/ ^3 x) f) Kstatic struct gpio_led da850_evm_tl_leds[] = {: G. n! |# W2 F) o& r) ^
{
$ r& m3 d" t# a7 c .active_low = 0,! Q- @9 u6 S) {0 N' h( y( C
.gpio = DA850_USER_LED0,
. ]2 X W. n7 Z' e3 y' A .name = "user_led0",2 e+ {8 |% U1 f
.default_trigger = "default-on",
$ L; x* j$ V. Z* x7 j+ c },/ ^8 q4 x" n, p4 m* o
{
8 `: o; ~7 {/ e. y- u7 h% x; I! N .active_low = 0,7 R# ?! M4 Z! d" {1 Z# k, T
.gpio = DA850_USER_LED1,
: ]( g) z3 e9 `% G# z( P .name = "user_led1",+ V4 O9 P! L$ _
.default_trigger = "default-on",
3 K: {3 f+ G( p+ ~1 b },- t3 C2 T: k: V
{ B: [( I/ G" Z
.active_low = 0,, w( Z8 y# L' a3 Y: O# z |8 J
.gpio = DA850_USER_LED2,
9 Q1 J, D. o: O) m .name = "user_led2",1 l2 f- ]# J/ m
.default_trigger = "default-on",
8 Y) P7 z+ {1 Y1 Q7 j },
6 z- ^" n$ R: D* _* B1 u6 L( X- Y {
. o# l. w; U; R .active_low = 0,7 \/ j' a2 U4 f
.gpio = DA850_USER_LED3,
7 u$ ^1 N7 @( Y% S! R- f2 |5 {0 K. t .name = "user_led3",
, k F/ ?3 b) ]' ?8 K4 M .default_trigger = "default-on",
3 M/ t6 j5 o0 R9 Z( g' Y1 D' @1 ? },
( x! S4 Q7 s" G; Z};. r/ e) G7 R" O: o# s1 {% \7 Q
( v) Y0 T0 a+ @8 @. N0 ?static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% B, k u& Z6 `5 ?7 F- A& y/ k7 G .leds = da850_evm_tl_leds,
3 Q1 \8 f1 [) y6 o4 ^& k( @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- A7 J+ C3 h1 N};6 ]9 G$ W# C5 e; A+ M0 t6 ]
& L. U7 i4 ?6 _ j) wstatic void led_dev_release(struct device *dev)% z8 w- F0 F6 O- Q' ]! r
{# ~$ [* a# E- Z% F% o* N. |2 w1 `: ~7 f3 z
};; A3 U! \2 u& U- {2 n3 d2 X
' b) {' i2 [8 a# k% x3 k1 A4 ^2 @" s
static struct platform_device da850_evm_tl_leds_device = {
& v6 n. \/ S* g .name = "leds-gpio",/ Q9 ^0 u, ]+ h t+ |5 J, q
.id = 1,
8 s8 X& i4 x" X5 t" ~6 v/ l .dev = {) J0 ^' Q' x8 b9 f. s
.platform_data = &da850_evm_tl_leds_pdata,
! J& W3 i/ K+ t% U# P. V5 q) A/ ` .release = led_dev_release,
0 p. s" Y% E e! f6 ?% N9 H! e I }2 y/ m0 U7 q8 K K+ ~3 {6 f
};3 m8 k/ C: e! K+ T
$ H; b' V% t* v1 O& ?
static int __init led_platform_init(void)& r3 v& h& d! z# k
{
8 H' W3 K/ i8 y c% K9 u int ret;( {4 {# f$ `9 @& G
#if 0/ w& y. S+ \7 W" p8 I. n. [" K7 ~
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 c2 l7 A7 P' H/ x
if (ret)
( C3 G' s- b6 L M' d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% k x8 V9 h0 `; ?. P- ~ "%d\n", ret);
( A0 o" p+ z" E, M% S0 v6 K#endif k" D1 d$ X3 l1 O/ t
ret = platform_device_register(&da850_evm_tl_leds_device);
6 ?& {8 m8 s2 X: p: T& a- r5 p. e% w if (ret)" p" @* O* @. |
pr_warning("Could not register som GPIO expander LEDS");& O: O8 O' T8 n5 f. S$ p- t
else
" w" ]& B! j! V1 f+ ` printk(KERN_INFO "LED register sucessful!\n");' P: ^! [. _* |+ W
/ `8 I* Z' K/ T7 o# { return ret;! R; W: c( q h; {
}
: ^' h! l) D# i6 |/ n1 m$ G9 W8 M' t1 V
static void __exit led_platform_exit(void)' E2 n6 U+ Z2 K I% @
{7 \2 E3 f1 r6 o7 h6 B
platform_device_unregister(&da850_evm_tl_leds_device);$ `' H. e& o/ B. Z( L
, M" K1 ?; \5 f" I) Z& C. U8 S printk(KERN_INFO "LED unregister!\n");
+ q% k2 z# ] V; W- P% J- h}
7 ~: a* d6 d: B* K7 {( i5 t4 f& x1 k; b/ e
module_init(led_platform_init);5 s: D) ~& G. d8 G$ n
module_exit(led_platform_exit);
: d: Z1 W% j; @2 t
% B( o4 x6 t3 E0 ~3 v% z# sMODULE_DESCRIPTION("Led platform driver");' h6 I* H/ X/ W0 B7 \: i( A
MODULE_AUTHOR("Tronlong");5 Q3 Y& y* J+ r. T# d
MODULE_LICENSE("GPL");
9 V1 O7 o. G" D5 K( U
) i% V( c9 j3 i/ b, _ |
|