|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" y% z4 G, R0 j6 e* p7 M+ E; y#include <linux/init.h>
) C8 @6 A1 f2 m: h- p#include <linux/module.h>
/ {0 a& R2 A: B: b#include <linux/kernel.h>
8 m8 w% j5 @' d6 T4 w' p% I#include <linux/types.h>
; @. s8 M5 V- A& v: H6 N# {#include <linux/gpio.h>! D3 ^0 K7 g, ?
#include <linux/leds.h>1 u6 m+ K8 C2 F
#include <linux/platform_device.h>
; J# R5 Y' |- H1 M/ X+ X9 H+ a6 w; P' x$ _7 N- f
#include <asm/mach-types.h>0 j E8 p6 q% y" g7 o, L
#include <asm/mach/arch.h>
$ L4 ]5 m9 J4 l, ?: u#include <mach/da8xx.h>
2 O9 x+ A" C6 S8 g#include <mach/mux.h>3 G5 M% [* U3 ?9 H( R" L4 t; m$ R
+ W7 I* g7 X* j1 u+ O& T7 h3 v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ k( s' B, z" D1 r7 y! [3 f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 s" F! L4 j/ K( Y( x
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 B$ y4 O+ L- p7 P E
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& X, C$ L8 Q. k; t- Y
* @# Z5 T: e, M& X2 ]/* assign the tl som board LED-GPIOs*/ t+ u$ F; v# x! G0 }5 s9 [) ?
static const short da850_evm_tl_user_led_pins[] = {3 S, U! ? a& F n c- n
/* These pins are definition at <mach/mux.h> file */
# I1 _% W! X/ ^) E& z5 O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% N# |" q! m0 D0 m
-1
2 y1 ^* K) |! |; k6 @};
& s+ ~( ~3 r( _4 R* F) V) v* t9 ]4 i* s" c
static struct gpio_led da850_evm_tl_leds[] = {
7 T# j! u/ ~) i+ H _: G {
% T/ N3 W) \* B: E .active_low = 0,$ e; u# X# W2 ~
.gpio = DA850_USER_LED0,
3 g K/ ~7 O+ @& j0 j$ J( g6 R .name = "user_led0",3 ~5 S+ d& e1 u6 k
.default_trigger = "default-on",3 C* I0 F' b! _9 c
},
& W$ N3 P3 f3 E) l- G+ D {# b- F2 V+ @: }3 d7 q3 u1 ?1 [# q
.active_low = 0,5 N2 I1 g, P( o1 o% k9 h1 F' Y: V0 B
.gpio = DA850_USER_LED1,
+ O" y1 E% e2 F ] .name = "user_led1",
" |8 O4 d" ?5 [* f" c' o* b .default_trigger = "default-on",7 ]7 V5 A$ D" f* w$ z
},* X$ ?7 r! M$ r# o$ n+ B
{
$ W" U' v: Q0 [# [" ? .active_low = 0,& X% p" \4 ~2 l6 G, w$ m' [
.gpio = DA850_USER_LED2,
) a O9 x$ x/ G a! a .name = "user_led2", u2 X+ C$ e1 [
.default_trigger = "default-on",
5 N0 K' ]9 \& v& x },' O0 x; C5 v$ ?1 S8 Y
{
; q7 o; r. W6 @9 G9 T8 U .active_low = 0,) H' Y- x ~% N+ M) b% T! l
.gpio = DA850_USER_LED3,* Q! {" D8 K# @* [) y7 U5 @
.name = "user_led3",
7 f5 E/ Z$ }' }! G4 e0 Y- g2 y/ g .default_trigger = "default-on",
* h2 l8 d2 f; w- ]6 r4 Q! L },+ ~2 [5 G% u- [- o
};5 c4 z W" O7 c* h
' V3 o2 j9 z. pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 l" i6 ]4 a z, H* w4 V2 G .leds = da850_evm_tl_leds,
" A! u- ~; w7 T. [7 W1 y/ {7 x5 q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. s4 R, g6 ~) E7 _1 `$ n8 y% X8 Q};
6 m0 c( y, R% D) c! K8 _ ^4 x: ]3 J' o4 t+ B8 Y
static void led_dev_release(struct device *dev)$ C. |% C% c9 ~2 ^/ |6 f
{
, E/ k: E2 w, i8 j5 ~* E. p" e};
$ V% T$ d" t H7 }4 u) G" Q
4 k4 j' h) Z3 P# `* @+ r qstatic struct platform_device da850_evm_tl_leds_device = {6 h. ~9 d Z5 o9 ~! C& h7 O4 L! k+ O
.name = "leds-gpio",& K2 |7 g& N8 g$ \4 O
.id = 1,( s* B1 m, g" Y, y0 x1 j# H6 Y" k
.dev = {
( B4 h' A9 K$ f( }2 v% m .platform_data = &da850_evm_tl_leds_pdata,$ ?- R8 e% W% c0 \' r% j' @
.release = led_dev_release,
& i1 w& p @1 d- U4 E4 C }
4 M% A! Y, w ~+ B+ r};
4 c" l# X. x6 M' h' X: A2 |5 s1 u. T+ K8 c( b, ~( u
static int __init led_platform_init(void)
' R9 P* r- b$ a5 R" W: j. q{
J4 m5 ?4 o% s3 b int ret;2 e$ y: a, R9 g$ I9 o5 A
#if 0) q' {& d6 n/ a9 a$ u4 K+ N
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 i: h+ d J9 ^
if (ret)/ K: O1 ^+ ], o0 T( h7 w2 W& V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# ?0 W8 U6 i6 w
"%d\n", ret);9 [, I9 K' j. C% Y2 \
#endif8 f$ u# {! f2 Q$ W& P3 Q7 m
ret = platform_device_register(&da850_evm_tl_leds_device);4 i A' ^' j7 Y* F' R- }; w5 d! f
if (ret)$ W* R2 k. b) P$ L. _
pr_warning("Could not register som GPIO expander LEDS");
! u3 a. t* |1 |/ a. ~! L else
, n3 D M1 \5 s; z) q+ M4 R" l3 Y- Q printk(KERN_INFO "LED register sucessful!\n");, r) I6 @4 T4 j( L1 M1 K/ K
6 C: x3 d$ C1 Y: W) b L& J4 B
return ret;
" L. `' [- [$ Y6 _7 x [& G}" H `2 n' d8 G; e
0 N' _% h _! @! ^' S, e) ^
static void __exit led_platform_exit(void)
. Q- I+ Y! y& q5 w! n{7 N3 G/ M. E3 v/ y2 J4 F
platform_device_unregister(&da850_evm_tl_leds_device);3 {, c+ h: M- M( W, S
1 \& }: _5 D' J5 F
printk(KERN_INFO "LED unregister!\n");: f4 G- I; p* }0 [0 ]$ L0 t
}3 F: f. X7 Q2 u1 [
" ^' ^( E2 _/ l- G& A( gmodule_init(led_platform_init);/ J% B! y# t: O: C5 r
module_exit(led_platform_exit);
7 Y& e. }2 l% n- H. V/ R/ X* r8 X f2 q
MODULE_DESCRIPTION("Led platform driver");
& _- v% L* e% u' R% q+ r( QMODULE_AUTHOR("Tronlong");' d8 F" n4 U" i2 l; Q2 j# V
MODULE_LICENSE("GPL");+ P! u* c: H4 \: {! ~
2 f! K: q, D. w# C2 Z
|
|