|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, T% j* i& ~" g: o8 Z
#include <linux/init.h>
; M- L- W3 K$ o h, g! k#include <linux/module.h>, r+ G2 k* i7 z6 ]6 Z% L0 a8 Z5 C8 x
#include <linux/kernel.h>
. }! U6 C& D& l% f; ?#include <linux/types.h>: R0 F9 j) m3 X
#include <linux/gpio.h>
, |/ \( }' s; x1 y& ~5 Q: F5 u#include <linux/leds.h>9 b, @8 Q) ^ ]& s$ g5 T* V5 i' J
#include <linux/platform_device.h>9 L7 R* ], F0 _7 {8 Y+ i9 Y8 a
2 n' g/ D* v4 C$ |5 e0 X
#include <asm/mach-types.h>
- W9 s8 @$ l+ X1 ^: D) b! T#include <asm/mach/arch.h>
2 t; S; J2 J/ W; A9 f#include <mach/da8xx.h>8 w2 w$ @4 h! u1 y L
#include <mach/mux.h>
' b' `0 u* t( p" t! i' b- Z! p' v& Q/ F
8 c9 s6 m0 Q9 U8 r#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- }! _- G6 H8 f6 x" d#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) {* \) B1 P; u( ?# F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 m" k3 h5 a4 |! |1 V8 o
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 [9 n: ?1 ~/ W4 I- f
" I% b, O @2 C1 e4 ~. d3 \6 {' l
/* assign the tl som board LED-GPIOs*/
8 Z Z+ Z3 }2 d& E9 J3 {1 M6 Sstatic const short da850_evm_tl_user_led_pins[] = {8 y) |8 g- K( q6 G- o) c& [0 G
/* These pins are definition at <mach/mux.h> file */
7 z8 H+ f& c. Q+ g0 o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- {* V) O' c" { -1 j* R! Z6 j8 b! Z" o! O
};3 J- J( _. m7 g# m
: d" g8 i& i' b* O8 rstatic struct gpio_led da850_evm_tl_leds[] = {2 I6 y& P1 Z5 H9 l: B) D
{
7 W+ n! H) g% h7 ]2 R! z" } .active_low = 0,( O( V) s4 @5 B% Y2 n+ c( r" ^: G: z
.gpio = DA850_USER_LED0,
$ W) C$ a q+ \. ^ .name = "user_led0",
: s; j8 r) [0 f- ^: k3 \ .default_trigger = "default-on",8 m0 |6 u- M% K4 D" Q
},
3 U( w9 M, C. l1 G$ ` {
6 Q. E8 M) o' p" \* u9 @: x; n .active_low = 0,3 z% B* s) z8 E1 H% _6 u
.gpio = DA850_USER_LED1,
2 p, W+ z* ~- h- ^+ _ .name = "user_led1",+ g7 n) A- M: x5 Q" c
.default_trigger = "default-on",* o0 D, Z( V4 ]3 ?- H6 Z% P& k, X
},& m6 U4 Y9 U9 h7 U: N
{
+ v/ C* K2 t8 d) |4 H9 A1 C3 k7 D, o- P .active_low = 0,
$ b k' B+ \8 A. ^7 Q$ L .gpio = DA850_USER_LED2,
. k" y. c- Q2 J' f& l/ K .name = "user_led2",4 q# s, @7 j6 t
.default_trigger = "default-on",
3 h2 q) F q5 a# n$ P$ n- r# S) h }, R# M- J7 \7 K8 U; C- p* O' p
{
8 s, u0 ~& j) n' K .active_low = 0,
( f. t$ B3 h U% K* R. Z* a .gpio = DA850_USER_LED3,
$ N$ R& D {, P& L- ?1 {, s .name = "user_led3",
7 I% T3 }* ~1 m- ]- P .default_trigger = "default-on",
" D1 t5 P' {: R },
1 k5 B/ {% P% Z! U5 U Z+ w4 N4 O( _8 j4 w};7 {0 j! l7 I, a9 t, o/ s
: x3 c9 b( c7 E# J+ x/ Kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% T0 b* J% t+ d' }2 [1 R, f .leds = da850_evm_tl_leds, a# K; j! N" {9 W$ S+ ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 \. q* C# k5 k: o$ c+ p% ~. s};
" m7 L3 b$ X9 c% G9 M) n, T& ~" n) R
4 r- W7 ^8 [9 O& j# p& Dstatic void led_dev_release(struct device *dev)
; a3 N3 C" |0 X3 I, H{
6 w/ {1 t. s) `};
% u9 x7 l" j2 S/ I" s; f( B& S7 L% f# @4 z; Y% m+ f
static struct platform_device da850_evm_tl_leds_device = {7 {7 Y Q& K' l$ E! p
.name = "leds-gpio",3 y! h) I8 v5 w: _5 O! ?
.id = 1,
( O6 u% a; z& Y& \2 t9 U( ]$ B$ H .dev = {! ]- K( D0 \6 k4 X+ a& w
.platform_data = &da850_evm_tl_leds_pdata,! t) ]9 N1 k. p9 P" P( g. u' Y
.release = led_dev_release,
9 A9 X. F! J% v }9 @9 q% v; w. k# F) D
};
( Y# C* V4 w8 T( V$ Q' T- P0 n8 n' C
static int __init led_platform_init(void)
( E5 j0 n! n. B3 ~. o{! d+ T0 {% f$ e6 r# n/ X
int ret;1 e0 @ Q5 z' J: v3 }' z
#if 0
+ w; J) U1 u5 a# k ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( Y. I( I& ~1 s2 H. [ if (ret)/ w Y2 ^9 ?8 F( z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ E `) T5 e, R5 l
"%d\n", ret);) T8 K# o+ p- x$ C+ {1 s) R
#endif: B, ?3 M6 w$ m8 U7 L
ret = platform_device_register(&da850_evm_tl_leds_device);
( f8 K( P% p. h* S9 B) x if (ret)
& D4 v) N1 F% B: a0 ?6 `5 q% n pr_warning("Could not register som GPIO expander LEDS");
- l% x0 c( ?% ?. @1 n; U7 N% { else6 x% K/ e p: @; W* m: E
printk(KERN_INFO "LED register sucessful!\n");; F6 K- Z& h6 G/ ]5 u) W/ j" \
6 }% h! P5 X' A$ L, ]; ~ v return ret;
, R `- n; n9 q+ x, ?8 a% H/ l9 Z}
* I% Y( _ X; L! T8 q' }0 a: J$ K; F
static void __exit led_platform_exit(void)/ K9 B; E; h+ ]- Y- ]2 z
{1 P/ m9 ?0 V1 k0 p" p
platform_device_unregister(&da850_evm_tl_leds_device);
9 j" T9 C& k) ]! ~2 b, p$ e
/ {: b' Q4 S* p' L printk(KERN_INFO "LED unregister!\n");
9 p1 O/ V# f( M9 K% M& y}
+ i- M" x/ u* S9 K" V: l( x9 [6 I7 E7 A
module_init(led_platform_init);* L8 T W7 b* i/ o
module_exit(led_platform_exit);' N: K E9 Q/ T0 w1 P; Z6 y
# o. u2 n5 I% v, v1 V. kMODULE_DESCRIPTION("Led platform driver");$ a7 ]9 {5 D/ j% H: d
MODULE_AUTHOR("Tronlong");% s" {( Y: Q2 L o0 Z2 ]
MODULE_LICENSE("GPL");4 b' d! D2 { F2 Z- n. \& u
6 g) m" u: d M' `2 @1 I& R
|
|