|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* H+ B* B, G4 p6 ]6 p5 d) O. K
#include <linux/init.h>
/ u: S, w5 j! ^; }$ K#include <linux/module.h>
2 k7 k% J& A+ v1 x#include <linux/kernel.h>
6 l6 h/ h, F! x- |8 U: y* a o3 Y#include <linux/types.h>
. k- R: H* c; O8 Q5 P" W' A% d#include <linux/gpio.h>
, V5 u+ v! a5 c4 K6 [* w- D#include <linux/leds.h>
1 F! }. ]3 w$ p# ~' o3 N#include <linux/platform_device.h>
( U- ^6 h$ h9 @: o% @
& f, M: |2 A( ~- z! \#include <asm/mach-types.h>
; A7 @# B; H( r# M% N" \#include <asm/mach/arch.h>
7 O! Y# c& R) B Z#include <mach/da8xx.h>
7 W& H3 v# R) {#include <mach/mux.h>
2 o2 |7 l0 r( w+ n" O$ }
& ? r3 u$ U$ k+ r#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& I" p- L0 f1 x
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 A0 n: z# n& E; X9 G7 r#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 k& B0 f4 e; V; [3 r) M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 v( s0 C4 I7 v, L
4 b7 f, ^/ O$ {2 o' j1 I, n/* assign the tl som board LED-GPIOs*/5 v, P3 g' W' F5 F. c5 }: H
static const short da850_evm_tl_user_led_pins[] = {0 h- x( [. ^1 [2 M
/* These pins are definition at <mach/mux.h> file */
1 i4 Z+ t1 e7 T. R4 N DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 @0 m1 `0 R7 y- C. c -1, N" a5 \# N' u! x; T# J! g
};
# l @6 ], L' o# l! ]/ J' O
- g: \# U1 h0 {# |; G6 F h& Astatic struct gpio_led da850_evm_tl_leds[] = {! n/ Y( ~8 n& M* h7 N- r# r
{6 s' v1 h2 \3 M% C- c9 r
.active_low = 0,( P Y4 v4 X W9 t, j: e
.gpio = DA850_USER_LED0,( c1 s. V- K" p# M( O" U
.name = "user_led0",
* j3 K$ ?$ {- z5 N/ l .default_trigger = "default-on",
6 w6 D' d9 n s; I; ^2 ^, y! ^ },
! {2 U2 B: B! A {
# j5 y% r7 e2 E+ d8 w. M .active_low = 0,
. e3 |# `2 |8 T# A .gpio = DA850_USER_LED1,
# e8 [6 T* O. E h$ ^" ? .name = "user_led1",% _- }0 v/ Y4 y) d- J! f* ~
.default_trigger = "default-on",
! K+ n f9 S8 [% Q7 ?0 D' k },
2 u, O/ `4 @2 [* R, H( V: C {( [& K/ T/ V5 t# O9 G. K; g4 x
.active_low = 0,: z+ y0 u; t) Y
.gpio = DA850_USER_LED2, g3 y. `0 k) U! O# v* B/ g7 E5 H
.name = "user_led2",
8 [; K# P- M9 q" D. r8 u# l .default_trigger = "default-on",$ w* |; k5 B6 E( Z5 ~% o
},
) N' K7 f0 W. R1 f, D {! K0 v* j! T# P. ~
.active_low = 0,
. N C$ c2 r# K0 o8 M .gpio = DA850_USER_LED3,, }* \* J" L; ]& {0 ~* J
.name = "user_led3",! M* T/ J& _2 r3 c; x/ t, D1 u. \
.default_trigger = "default-on",
. c& A& J+ Q# _6 C },
+ P: V3 Z) S' B" V};7 h, X) {9 x2 V+ D* }: Q: V4 b
& x& y5 d, y# Y6 \9 `* j% ]; c1 y) M
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" Y. L8 N5 T; j t( w) _: i7 E. s, Z; }
.leds = da850_evm_tl_leds,6 e. p3 e2 ?8 D) S4 w' ~! w5 T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% s" f' G4 B& f$ G" a6 U};
! y2 B; i |) g* }3 T, X9 _) I. i
& x1 a. U) c& m S8 b" cstatic void led_dev_release(struct device *dev)
/ O1 |" W' O: O B. N* n{
. a$ N; e0 B. u" X};
1 D; N2 {% N7 t. D/ I0 G0 V C
% k9 ~8 ^9 A, Estatic struct platform_device da850_evm_tl_leds_device = {
& f' @) A& }: L9 Y* N .name = "leds-gpio",: s$ ^: S5 L" v0 \+ T6 L
.id = 1,
( M8 r8 q0 V5 N' Z3 y .dev = {8 B3 D/ k4 I9 s. x# _
.platform_data = &da850_evm_tl_leds_pdata,
7 X# K" B. W$ Q" Q/ ? .release = led_dev_release,! F4 H) M3 p8 r5 v" {
}, ?' O+ Z0 A z' i
};
; D8 G z4 ~# N+ }, b1 X* P% u* s0 l5 ~3 r) w Y/ Z
static int __init led_platform_init(void)
! B+ a9 H- k: h, ~4 o{) |4 o4 R9 Y: x$ A0 k
int ret;
; f/ m6 S2 f$ M#if 0( W/ v$ }$ o: \6 ?9 `# b$ |9 j0 Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
?% Q* ], \1 x" Y6 g+ n4 R if (ret)
# D t) c. _" n5 C pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 D# T. A4 y$ O
"%d\n", ret);. H4 Y+ P/ w# {
#endif
1 n$ v/ A. z5 J ?; @6 w3 _ ret = platform_device_register(&da850_evm_tl_leds_device);
- f: ^5 C: \7 C( K if (ret) N C5 l9 {& h0 V% m( Y3 N K; u
pr_warning("Could not register som GPIO expander LEDS");
7 x* S2 l" _. ` else0 }* \" R# E3 O# U9 F. U& v
printk(KERN_INFO "LED register sucessful!\n");7 r i+ o) A- q
+ d$ h# f3 ?, b1 i7 } F) ~ return ret;
# n4 D5 U2 `$ c}6 d, D1 k5 {+ X. K
( Y; T) ~) D$ Vstatic void __exit led_platform_exit(void)& m/ l5 V- J3 i1 e
{
4 a8 Q1 C/ H1 g2 W0 m8 s& ?. d+ z platform_device_unregister(&da850_evm_tl_leds_device);
7 x* Z7 p9 e1 L! v* x0 v7 m$ r- Y: P# }0 e
printk(KERN_INFO "LED unregister!\n");
: d F: D* Q6 n8 w}, ]4 }/ G; J5 |7 K b# y5 K
; N% r; f) Y. ~( c4 B3 U
module_init(led_platform_init);. Z- k7 t8 X) F" b& | l
module_exit(led_platform_exit);
5 x8 V; f1 {- E5 E% p* u1 I6 L) W
MODULE_DESCRIPTION("Led platform driver");* I) K6 M' R) Q5 J! m# X
MODULE_AUTHOR("Tronlong");
- o3 x: M/ a) A( d: m3 M/ cMODULE_LICENSE("GPL");
- b! Q* L1 O5 N+ B, S* h; d/ m( \! A
|
|