|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 ?9 B: u% G) ]9 F0 M n" s#include <linux/init.h>1 P! t) J+ x( i: Z
#include <linux/module.h>
0 K# _$ b* J2 D2 n" O#include <linux/kernel.h>! B4 Y" s, O5 P4 s* N$ M
#include <linux/types.h>( u6 [/ b3 w3 V6 @3 V) @* y; K7 i
#include <linux/gpio.h>
9 |0 z) f$ ?- J9 R0 q#include <linux/leds.h>
& X q. {0 N! z#include <linux/platform_device.h>
' f" S$ k9 k- Y2 n! m7 a" i+ ?! [! E8 R, f G& B
#include <asm/mach-types.h>
2 \8 N7 @# \, c) `#include <asm/mach/arch.h>9 v) C, j' \" T) x8 N
#include <mach/da8xx.h>
# H. B4 K9 o x, x$ O9 T#include <mach/mux.h>, ~; q' A+ Q# g# O
9 c. t- F! E t#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); Y+ p3 {6 v$ m# ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ y- b* o* {8 J$ o( t' O: N$ M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% L5 J. }7 X$ [1 W+ b) ]+ o2 l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 D8 N0 s0 W) R/ m
5 {- W% }! I# S3 x% Q/* assign the tl som board LED-GPIOs*/% w4 o3 ~$ R* j9 z" m* u
static const short da850_evm_tl_user_led_pins[] = {
; B* e$ ~5 V w2 L6 r( e( g3 _ /* These pins are definition at <mach/mux.h> file */" I$ {! s- r p0 \5 P ]% ~) X; O
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! r+ m4 \$ A! |4 T+ K -1
Z9 ` v5 W7 G( B* x- K3 V};
9 n. F4 L% P9 Y: A& T4 [8 z- G% M( m" a+ }6 n8 J
static struct gpio_led da850_evm_tl_leds[] = {
, M; L. V( C# H$ |8 m ]. y {7 V# p" Z$ G% L# L: ?4 E/ Z
.active_low = 0,; R! L4 ]; U& z9 j- b( g$ H9 }
.gpio = DA850_USER_LED0,
! d# [' h3 \! {4 F$ `- M& ] .name = "user_led0",+ S1 o6 Y: L w
.default_trigger = "default-on",1 r% P. Y9 u ~# \7 W7 G/ Q
},1 }+ @/ ?6 ]$ c0 {0 i k
{5 p9 a" X* t3 h% M
.active_low = 0,; H) e- T/ C* L1 I, |$ c
.gpio = DA850_USER_LED1,9 v4 N1 \: A; k2 \3 J
.name = "user_led1",7 s7 }+ J# V" L; j( j
.default_trigger = "default-on",+ j/ N- N1 B* L# W4 H: v! `+ {
},5 S' u+ f" i! [2 {* V5 l, E' h
{7 n& Y/ x* V6 O$ v* e7 ^1 u+ J9 g4 T
.active_low = 0,
2 `$ D: C! O; f4 R( }' F .gpio = DA850_USER_LED2,$ K1 P" p7 s Q9 B
.name = "user_led2",
! \) w0 o; B% j* f' U$ g .default_trigger = "default-on",. w" C/ Q& _' @0 r: E- k; c7 _
},& J( w6 L1 ~6 R' O& `/ P' ~
{* {- }$ h2 g* q2 z& `2 \
.active_low = 0,, s$ L( S# A" C: F: E2 `+ I2 I
.gpio = DA850_USER_LED3,
' m/ a( Z; Z+ o6 f. J" b2 Q j .name = "user_led3",
0 ]) j5 J) Z4 G: Z8 d4 g7 R$ m .default_trigger = "default-on",
7 d) L- d0 {% m2 O( K" X' E },
" H( U6 e7 N' g/ o0 u5 C};
6 z$ \9 @. ?2 }- @9 u
# l9 X+ U/ q% b) U5 E) i' H1 q, tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) f- p2 {# ^( q' i b
.leds = da850_evm_tl_leds,, P7 R/ f' D2 O6 y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ {0 U# ], u& t' F3 O. N: k0 G, A, o};
& q9 {9 q o+ |% N/ |$ Q
* ^, T: R/ k( y( w6 J j/ M! q! @static void led_dev_release(struct device *dev)
# y8 I( ` s2 r2 U) F& h1 Q ~{+ \5 H2 F2 G$ Z% J
};
0 `! x$ j' G$ ]. e3 V7 i6 n+ G% O$ H
static struct platform_device da850_evm_tl_leds_device = {5 |4 h1 H* l$ r: i u
.name = "leds-gpio",. y1 C7 p5 ?$ B& o
.id = 1,1 t: V- W& b5 O0 u6 Y" m$ ]/ p
.dev = {
" Y! e4 T4 y, r" A4 ~4 S: r .platform_data = &da850_evm_tl_leds_pdata,, C2 x- q+ D7 B% v
.release = led_dev_release,
( |2 w4 p, V5 ?5 i }5 r$ B9 {( `8 |% J' O
};. A0 K( I5 r! v, I" k
$ `& b+ [! a8 Q# jstatic int __init led_platform_init(void); o% V6 X- w1 d4 L' d& o$ M3 |. d
{
) i m! T! e4 n1 h2 K' p5 `) Z( | int ret;
& K# M, E' }+ v; e# _- F$ H#if 0" k) L Y3 n" ^8 i& v1 p
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 k3 _! u. I. C. G, T0 w
if (ret)+ s" [$ C7 B2 W, Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% n! ~+ f1 n2 I1 P9 A# ^
"%d\n", ret);! m0 [! B) V4 c1 g/ [9 N8 b
#endif
, \0 E0 W' k, |/ p9 p ret = platform_device_register(&da850_evm_tl_leds_device);+ G1 S3 f7 N, C; W x
if (ret)6 `3 p) R- s) W+ U6 u% C! r
pr_warning("Could not register som GPIO expander LEDS");+ H+ r6 i6 g. N) d. R
else! a9 U! B. B; _$ a! f$ L
printk(KERN_INFO "LED register sucessful!\n");
$ [8 p. Q! u1 }1 m$ k
9 ~& v8 v( g$ Z3 q) J. | H return ret;
, d; h8 [5 m* f}6 d- y) z2 Z4 [* L
1 e. t+ n+ } c6 t/ @7 \5 M
static void __exit led_platform_exit(void)/ `; g; ^2 t( w& i
{; h2 I) b1 a7 x, p g$ H( b4 c
platform_device_unregister(&da850_evm_tl_leds_device); F" D. W, q- |6 B
2 i& r g0 z' p1 u printk(KERN_INFO "LED unregister!\n");
z% U, u* f" |' O}
( `0 T8 G, k; h2 m; j( S+ ~: ^+ R$ V! i9 K$ Z2 _
module_init(led_platform_init);
. q+ T; |+ k! U$ a; Vmodule_exit(led_platform_exit);, b+ q, e# d6 }& M; |$ {% O
0 I/ E7 G/ j5 b& DMODULE_DESCRIPTION("Led platform driver");0 f$ p }7 [/ O
MODULE_AUTHOR("Tronlong");! I x1 y! T3 x# L$ c
MODULE_LICENSE("GPL");
# ~: B6 g# D4 @) U
! A2 T3 Z; @4 i8 M3 q+ g3 _ |
|