|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 z4 l5 M5 \* N#include <linux/init.h>5 x+ e- A4 L5 ~
#include <linux/module.h>
% ~0 W& J, Z) }# b2 z+ e#include <linux/kernel.h>
, D: h8 V+ W6 x7 p- u1 F" G0 ]#include <linux/types.h>
4 R6 p& D) R# G5 u" D, l#include <linux/gpio.h>
7 ]0 A5 c6 P ?- a#include <linux/leds.h>2 i- i7 S/ j% w8 F
#include <linux/platform_device.h>
/ S7 T# l2 O/ z" N& X. |& u) q2 f) U; E) e3 P+ d
#include <asm/mach-types.h>: a6 c; e/ P3 V' |
#include <asm/mach/arch.h>
5 S0 o$ n$ P! j' u6 K& u# u3 d, {#include <mach/da8xx.h>
6 T! i1 j1 g: j$ ~5 f#include <mach/mux.h>* e0 g% T4 }9 y1 B- E
$ c+ F2 n/ x7 [* i$ ]#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 a. L/ y6 C* O& b" U: d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ v6 j0 s# p* k# U1 o. s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# Q% H D* J1 y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 G+ p [: H! K7 g; ~6 o
- U! P) t8 \% J+ `
/* assign the tl som board LED-GPIOs*/' D2 ?5 e; k' P
static const short da850_evm_tl_user_led_pins[] = {. I' Z8 T( W) B0 V, m
/* These pins are definition at <mach/mux.h> file */" M7 M7 V7 i% J& R Q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 o: o5 l. B: v: q0 y' m- {. p -1
" K$ C3 {. m" J) Q};
6 F& q) b3 G3 Z# g( C: W! Q! \' D2 i, _* v5 ~
static struct gpio_led da850_evm_tl_leds[] = {
0 I- q# m3 g. X* q; H q4 w {
" x6 J1 d* \( h7 u7 v7 Q .active_low = 0,
8 P+ e$ y! L( p .gpio = DA850_USER_LED0,6 `0 [3 H. Y4 O
.name = "user_led0",
! X% \* v& H) o- h. u" L: s .default_trigger = "default-on",
G+ P* O% x. p$ C1 j },
1 m2 {8 R: T) a5 G {0 z, V1 _8 f3 b0 `/ v0 q& ]
.active_low = 0,
% G3 q+ J% @* r! X2 l .gpio = DA850_USER_LED1,
8 R: F1 i. r! V# W# T y4 |' F .name = "user_led1",
- E. h! c7 ?9 v( Q3 [7 u .default_trigger = "default-on",6 o) |" E8 M) w: Z( S
},9 ?9 ?6 \2 ~8 [1 ~
{
0 I: H( i) Y* Z0 K/ k! g .active_low = 0,
9 [1 }" g0 ~0 B$ E .gpio = DA850_USER_LED2,
: [, ~ T; A7 C .name = "user_led2",! z, M- ?0 C. W3 a3 o7 h
.default_trigger = "default-on",
! o+ T8 x5 R3 `4 o. Y },3 k7 [8 ~/ s' |4 T
{
# K1 p( i5 x3 C .active_low = 0,
# q0 z( J6 h: g \/ @( g+ k& m .gpio = DA850_USER_LED3,
+ Q3 @) `: z: h) [1 O& F( L' s- M .name = "user_led3",) l/ {* @, k; v8 B I4 `5 b" q
.default_trigger = "default-on",5 T, w1 y# y5 V# R+ [
},3 e- \' E- d; h/ i* n# p0 l& d/ h
};: } L1 E8 ^' N- V3 j; @2 _& P
1 d5 p8 J$ z6 x( l4 s+ ?2 o, ]- @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 Z! ~8 g D" i- d/ F" t
.leds = da850_evm_tl_leds,, `- Z4 Q, z0 k: Q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
H/ v; h0 l8 Y& {$ S};& c. X4 B8 ^7 z4 S6 y) P
. D& N. J) i5 z7 f' s& Z
static void led_dev_release(struct device *dev)
- p5 L0 K. H6 b+ E* w* {* S% A# _{
! F w# a1 f# L, X' I$ C5 }3 {};
+ p, v/ b" Z' R3 i* a g0 p( J4 X {
static struct platform_device da850_evm_tl_leds_device = {
% z* A, `, X0 v .name = "leds-gpio",3 o4 V& A. G* J9 \9 ^
.id = 1,* A5 q* i& {+ n
.dev = {
" j+ E0 ~( E* V# [( t- W .platform_data = &da850_evm_tl_leds_pdata,
# f z" ^( a# s .release = led_dev_release,6 [. C' c% @8 A7 C
}
7 V! _. x3 Z4 ^2 O8 S9 z" H- O! T1 i};7 Z' {1 O i- p0 [% m& t
( |: f4 {' P; q8 O
static int __init led_platform_init(void)
8 ~+ Q, z# p! _3 l; z& G: ?. d2 U{3 c% |9 T. f( I' o, I
int ret;
: k: A( y3 V# I, `; X7 ]+ e#if 0' W+ p/ R+ Y: O6 h; ~% C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' n! H6 W+ H9 G, f2 _
if (ret)7 e% R' w. L& C1 }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 A1 [8 S5 ~9 ^* g7 t
"%d\n", ret);
' w2 e2 b/ ~9 q2 l! L#endif u$ P) g; F/ l; I/ |
ret = platform_device_register(&da850_evm_tl_leds_device);
7 `2 \% M. v- q, z7 t+ \& s if (ret)# q8 D& z. O% a H
pr_warning("Could not register som GPIO expander LEDS");
" a: v) f( C$ r+ ? else
& w2 ]6 M2 ^" K6 U0 ^# d printk(KERN_INFO "LED register sucessful!\n");
2 P. T& g; Y! x6 x2 [. @' K2 _
4 J- |2 o E' _/ h9 m# n return ret;0 u$ o! Z# @$ _
}2 X& t4 O5 S( y, X% `5 S
7 z' x- W$ i- O
static void __exit led_platform_exit(void)$ P0 @5 m3 m6 h4 t6 h0 Q
{
, S6 @4 w# l7 h f6 V& } platform_device_unregister(&da850_evm_tl_leds_device);
; C Z$ N* ^) e, C( w) C
, f; D1 i- w; Q, {8 d printk(KERN_INFO "LED unregister!\n");
# z- k2 f k$ N4 ?7 o}) I8 c6 m- r. l) `0 F9 C# |7 G
' D2 U0 V s, O3 k* ^1 ?) z( M8 \& Jmodule_init(led_platform_init);3 R. O, V7 q6 M" G; c
module_exit(led_platform_exit);
/ ^4 M7 R8 ?8 v5 k
" x0 \( }3 s; q% \MODULE_DESCRIPTION("Led platform driver");
3 B0 m6 _% J) A; y! hMODULE_AUTHOR("Tronlong");
6 R) a' F( b ]7 wMODULE_LICENSE("GPL");0 B' V2 \8 \' P: b* G+ |" b* v. P
. H L' F2 C: X% v. h7 u |
|