|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 l3 T4 j3 v) W8 H# `( {$ ]3 E#include <linux/init.h>( q+ z$ Z. M @4 E+ l
#include <linux/module.h> R# D$ _# Q$ }* y1 \3 Q W! F
#include <linux/kernel.h>
. `2 i: ?5 M, {$ E e' ~#include <linux/types.h>4 f$ y. x1 u- Q* \6 b6 ~& o
#include <linux/gpio.h>
- ]" J* j0 O* a' n% l#include <linux/leds.h>
! t9 m0 Z9 U4 b" e" Q#include <linux/platform_device.h>
8 A6 u& V4 |2 n9 d4 E3 u6 W0 M- b$ j) n$ ]% r' J8 ?/ j: {
#include <asm/mach-types.h>0 N$ s5 Z; Y1 {% R" `6 o
#include <asm/mach/arch.h>/ |. _9 p8 u, E* @
#include <mach/da8xx.h>& {6 t/ @4 A" _4 x
#include <mach/mux.h>
F( ]( R2 Q* J. T- C( k) K: M0 y3 I D$ e, a( e
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* m5 `3 I; C- ?( m4 u) x A
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): L1 j' K+ [+ h
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 D6 F* t: q" E/ Q( c4 I#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) h! D1 _+ M! |; n% \9 H7 B: e" C5 j! @1 k6 U5 I
/* assign the tl som board LED-GPIOs*/, u5 T4 z+ R. l' b* X2 X
static const short da850_evm_tl_user_led_pins[] = {
/ L! O8 `. H2 j, Y: ] /* These pins are definition at <mach/mux.h> file */
* n/ ^8 e% w1 m( |1 V# y6 _& [ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 W- {: ~( M3 m$ g
-1
g# {7 |! H, A" W8 f- }) a0 }};
$ S4 _+ p, a" L+ C9 ~0 j8 m' \' r9 D/ G; b5 `7 Q8 {
static struct gpio_led da850_evm_tl_leds[] = {
9 m# j& n9 ]$ } { M; x. f8 R% ?5 y8 [1 B
.active_low = 0,
2 R) v2 t/ D1 f; w2 w/ M7 [ .gpio = DA850_USER_LED0,. `' v7 [6 T) f9 I* Y
.name = "user_led0",0 A- @" q- c, R D, e$ M
.default_trigger = "default-on",
, d" ]* i. k* F0 h: J, o4 h9 V },: E8 D3 L& t9 G! \: G/ b# a# k
{9 ?# L; H/ v5 o
.active_low = 0,
2 b- s- a9 f$ E" W# U .gpio = DA850_USER_LED1,
# M- O7 o) h, g* t3 F/ p! B9 _ .name = "user_led1",
) @( ]4 d& o9 W ]: ^! ?; g .default_trigger = "default-on",& J7 i0 n( ^% |' ]( X( i
},; j1 P' O- P* Z( s% s- B
{# @& R% @5 X& o" G4 n
.active_low = 0,2 _- g' S2 P" F" N6 }) E" r
.gpio = DA850_USER_LED2,
& m) l( K* B M$ V; u% C' p& O- S .name = "user_led2",
4 l* R3 e' w) U! ] g' T .default_trigger = "default-on",; R. X( u2 L: Q7 N3 n, k# S& n8 I
},9 E8 y! `; V6 L4 D/ t, z
{
. i O9 V+ U! W9 X. I .active_low = 0,
* S' K4 z; G# @( c6 V& [ .gpio = DA850_USER_LED3,& E+ Q6 @% M |% s; Z a
.name = "user_led3",6 k; f m; Q4 J
.default_trigger = "default-on",2 L2 B: b9 Y" X. H$ b- }3 {) h
},
* P, h( ]% n( F' m7 {};) C6 T" e o, Y* C4 e
. j( n) {9 H& K: S' e) q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" G4 T) q6 g3 l2 B3 Y7 K! n
.leds = da850_evm_tl_leds,
2 L- d6 n y7 R$ Y( K3 f .num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 k K1 D9 u n0 \% Y. h! m7 ]/ F
};& U7 f- r, s* i& V; Q# [
, f. Q" [; |3 z# H, @6 B9 }- O; m
static void led_dev_release(struct device *dev)3 e$ J. p- K5 S4 n! v: q, V0 t
{ M0 w) K1 H; D' W/ N, _
};, b$ v9 g. p& v, A
+ U. k: k9 `& }: X$ Zstatic struct platform_device da850_evm_tl_leds_device = {
, ]; w G! ~) H9 }7 P8 I .name = "leds-gpio",
) w$ ^3 z" I- C4 G7 a3 n! L; A. ]9 p .id = 1,
/ ~& Z1 c# x6 i% R7 V .dev = {
: c3 y- |1 j0 M3 j. k* Z .platform_data = &da850_evm_tl_leds_pdata,; b0 q9 U0 q0 M. [5 Z! [
.release = led_dev_release,* m" n. A+ v! M5 Z
}
: q0 _0 r" d$ @9 [0 |. U2 r4 A) S};, w3 T" E) g. o8 o4 d! y% }" C4 m
: I' R$ C4 K2 M d, Q6 U
static int __init led_platform_init(void)
" R3 v' h7 C4 D{; S+ X# Q* y. ]! E
int ret;
; |1 M! E6 u9 e3 V#if 0) ?% F1 \( {% Y3 F2 O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) q" h" j M9 n( q; Q- o* _8 Q if (ret)7 n# J, z# a5 R: \1 X% \3 f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 C/ _' ?8 h* j5 _ "%d\n", ret);7 |7 ~' P! H i* v2 g2 E
#endif
. |9 H* H' B) {/ v9 U: J/ I ret = platform_device_register(&da850_evm_tl_leds_device);. S* ^/ X( T/ L& }' v9 c* K
if (ret)
5 h O6 ]# R( a pr_warning("Could not register som GPIO expander LEDS");4 c, ^ X4 I5 t
else; j$ @$ P( D/ J& o, S( G) f
printk(KERN_INFO "LED register sucessful!\n");
; d, c% t2 H$ `7 m1 J
5 J: W/ E& ^: }* ~- r0 B- D return ret;
( O! A/ u. F v& _0 [- i}
6 m7 ^7 p& B1 ~. s5 Z' Y# p, Q, l! u h" G+ p7 y6 Z
static void __exit led_platform_exit(void)
( L1 \# N% S( g( v7 [% }{
. [1 v# [1 s# \5 \' k! N! s platform_device_unregister(&da850_evm_tl_leds_device);
9 v1 @4 z9 ~0 _/ g4 Z0 H9 T! r1 i7 b& Y' O$ x# k$ d, l
printk(KERN_INFO "LED unregister!\n");
9 g% ]( A* F" B. t! a" i}
. s4 H( T$ i5 o7 N- U& {3 }% z Y1 Q4 C
module_init(led_platform_init);% _5 @$ f; B; ]: h* |6 ?9 V& K3 n
module_exit(led_platform_exit);
; w1 f; |% `# ~5 t J: J+ A" z2 c. f! N) M' @. \2 E# r
MODULE_DESCRIPTION("Led platform driver");1 ], p# x# t7 [: c$ p( v
MODULE_AUTHOR("Tronlong");. T6 e, ~+ L1 m" ~8 z: g
MODULE_LICENSE("GPL");
* E% ^( r1 X( g" i/ O/ {0 b5 s) K B. A1 J
|
|