|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* Z& O& L: v! |, r3 a* q1 t
#include <linux/init.h>5 M' y' s& g! ]/ @# s- ~- E$ f
#include <linux/module.h>7 e! S+ A9 D9 r- t3 {
#include <linux/kernel.h> N; Q( M7 r9 r) j
#include <linux/types.h>$ U) A; c0 I8 O- h; z# C% W+ b
#include <linux/gpio.h>* {2 Q; D9 p% K. T
#include <linux/leds.h>3 z' Q0 ]1 b9 Y6 ]# R' H4 F
#include <linux/platform_device.h>
! i! @' H" N! _* _3 y" h4 H% _. ?
9 i) R( ?" M/ l" y. R#include <asm/mach-types.h>6 {: Q! F2 B# d5 r" n! n; \+ |6 \
#include <asm/mach/arch.h>3 b `0 c- O. ~" C3 o; b
#include <mach/da8xx.h>" ^7 C+ j, R. z; c3 d) I/ k
#include <mach/mux.h>8 U2 q* O) z- B. q& a& V! h
1 |# f: H/ |$ ^8 @; A$ g" U#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, r3 a7 B0 P" w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! M% M: U) R' n5 ]/ d7 F& X
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 C" P5 L( b8 \& ]#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- w: Y5 V8 p/ E7 X# {; v2 L
% V* {9 ]' T0 e0 Z9 t/ b3 X/* assign the tl som board LED-GPIOs*/7 n7 z& y, X( ?) ~
static const short da850_evm_tl_user_led_pins[] = {
5 d8 k5 T* j+ [ /* These pins are definition at <mach/mux.h> file */
" N. ]+ z/ i6 j/ |8 e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# I" ?; j0 Q6 A8 V% J4 F -16 P& {& r: E$ ^; q) c! b' M
};& @% x, ^/ D/ g$ z
% s5 v0 n; W- a
static struct gpio_led da850_evm_tl_leds[] = {/ a3 }3 E; M; h& z9 x
{9 M3 d, w% ]3 p: Q. U0 c2 E& C* q
.active_low = 0,/ c5 A9 o2 O6 m# a0 o
.gpio = DA850_USER_LED0,
: g* ~' o! b7 M8 V6 I0 u .name = "user_led0",$ B) v b5 l- D5 I7 b( Y: D4 Z; c
.default_trigger = "default-on",
6 \# @0 A- v% P$ l ~3 Z+ n, {. B* N8 w },
+ a. r# ^0 H* _0 x8 m! E+ ?4 I$ L t {
( M) y) a! u2 }" `, C5 R9 z1 r .active_low = 0,- P* T: ?& J4 k* G* K4 a
.gpio = DA850_USER_LED1,% Z7 U+ l2 M) |% \# z+ p2 F
.name = "user_led1",
; i7 O3 a. A( W$ }/ J .default_trigger = "default-on", Y m3 d5 X! ~. r
}, w: u( e$ a2 k3 I: k
{
; W6 s7 t( U j) q! }0 c .active_low = 0,
% _% a0 X; O/ E! i .gpio = DA850_USER_LED2,4 z9 v( V7 H& {: M
.name = "user_led2",
/ S& I5 a) x7 V% x! a! i9 ~8 a .default_trigger = "default-on",
9 V8 Y- U B) l8 z },
) \* M6 D8 X. c# ^% @ {
u+ m. L, T9 ~7 S& Q0 N0 S .active_low = 0,
7 ]" o! H% t( [0 H# U" q& D. g5 l( \+ E .gpio = DA850_USER_LED3,* ^& i9 b6 _3 v6 n6 ~5 v
.name = "user_led3",& V: x4 j: S) G+ i1 e) Z( q( `
.default_trigger = "default-on",
, K( O8 j* f5 b% v },$ b7 M9 L6 U! s5 E
};1 M+ g8 \/ _/ ]) l3 M! [
9 M2 n3 i1 z0 z" m5 Q1 Mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ K! E9 Z2 v+ x" b
.leds = da850_evm_tl_leds,
: E8 {) O( j# l K- F .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 n: f2 @4 N9 P1 X' T6 S
};
' V" T/ J1 B2 S: P, E" b+ u0 S3 D! |
static void led_dev_release(struct device *dev)" Z4 p; H; x8 k
{
0 ]4 e: P, X* q9 |3 F e};% l& t1 L* T- L x) e7 L
7 p/ p$ ]& C4 J5 L9 v* ^static struct platform_device da850_evm_tl_leds_device = {7 W: `" A# g% ]$ A6 @! \
.name = "leds-gpio",
9 K5 c2 X W+ V% K8 V2 x$ H- K0 [ .id = 1,
/ o* ?/ _9 P$ C, T* M7 c/ a! j; Q .dev = {( Y4 m; \) I9 g) T7 I/ M& W! {# l
.platform_data = &da850_evm_tl_leds_pdata,- @* e9 i! V$ D/ P: R3 ^
.release = led_dev_release,% A- X# a+ v0 R$ O3 d" L
}
& u$ q# y1 z' O1 ]};
. U7 E8 ~" q" B% \7 u& t" ?" G; w
% ]9 [% q/ F; s: u& G; x; j5 m8 ?static int __init led_platform_init(void)1 G0 E, O& r! t1 ^( ^/ K
{
: d' h8 D1 w' V' z. \ int ret;
6 ~ ~( V: r* _/ S# I5 d% j5 d#if 0( D* T/ V3 @- n/ a0 g2 p b/ U' l# S+ P
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! H* `! Z5 q, `2 t
if (ret); b, m7 f# c2 E6 @ y- @9 T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ A- G4 }; e+ w
"%d\n", ret);/ i; |! H7 ?- q' {3 F4 x
#endif
4 w! ^! `" }) C) N3 G. j2 X3 h ret = platform_device_register(&da850_evm_tl_leds_device);
5 X h2 L# g# U6 p7 X, C0 \: V if (ret). P! N5 ~* o6 a) o+ H$ L
pr_warning("Could not register som GPIO expander LEDS");
+ e* e( P( ~8 W' z) X else
0 e: E4 u( k. ?8 e( h0 P6 ? p N$ l printk(KERN_INFO "LED register sucessful!\n");
) N5 t e J( h1 k5 d, { P7 O- p( C" `1 j" Z9 e! P1 m+ [: ~$ a
return ret;
+ e' S. J' b5 _5 U% o}
+ P1 o) ~3 I+ v
r1 k+ [" \( S, T* [" @static void __exit led_platform_exit(void)
0 i T( `1 n; T; p{0 f3 C; H% V6 Z8 `# }& j
platform_device_unregister(&da850_evm_tl_leds_device);: h! e$ h! E# r5 j! A
' a. A2 F" A! s c3 y printk(KERN_INFO "LED unregister!\n");
% D7 d" W( w1 V5 Y' h/ \} e; `* Y% Z& B s6 J
5 r: m; I6 K- Y3 n$ X- omodule_init(led_platform_init);, @9 T2 o1 J0 C& f( {& _* e
module_exit(led_platform_exit);; Y1 R9 B$ f& H7 s" V5 h
/ ^* P. `( H& j4 D2 a4 b, RMODULE_DESCRIPTION("Led platform driver");1 L1 \7 x0 N3 t Z
MODULE_AUTHOR("Tronlong");
- ]; D. M. h4 H; n+ d! bMODULE_LICENSE("GPL");! R- N& n3 f! v
7 d0 G4 T/ \( _' l$ a |
|