|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 O8 l; e' \& w
#include <linux/init.h>
+ B0 `5 Y& r' Z d5 \/ n, C#include <linux/module.h>
9 `; o/ _0 Y6 F8 Q' u7 b' Z P#include <linux/kernel.h># H! S5 ^0 p, y" N* u
#include <linux/types.h>- F. {( C$ g3 G3 \
#include <linux/gpio.h>' ?, T: R5 @/ B7 v
#include <linux/leds.h>
! C X1 s8 @* B# D) g#include <linux/platform_device.h>
0 }& J$ r6 C; j0 D
1 B& Z! Y: | `8 k/ O& q! Y/ j#include <asm/mach-types.h>' i' A$ W( h/ i) r! i G, B4 V" D9 [: U
#include <asm/mach/arch.h>" {# `8 ~: v" D, }
#include <mach/da8xx.h>% p2 |& {, y. f# L% K! ~
#include <mach/mux.h>8 E* X4 h' d, k
5 F) y0 @$ j) p+ B3 D g
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% C/ X' `, l# N8 t' Y3 G
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 S1 c) z: {" }- C* P) J#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ J# x ^) G! J8 h3 v' Y+ l( o/ _
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, ~* y1 Y P4 L5 R& w6 m9 x3 @" ~+ [1 ?
' ?0 m* O3 H D" v2 j; s* T/* assign the tl som board LED-GPIOs*/% {4 Q3 E+ ?' _& {$ \
static const short da850_evm_tl_user_led_pins[] = {
4 H" ^! @( ~& o: g) G0 Q /* These pins are definition at <mach/mux.h> file */ ?* }. _& r0 c2 N
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! q6 g% L f( i" M
-1# g Y- A" ^: b/ U( Z/ i i6 V
};
$ Y+ u, q3 h# t
5 t6 U9 D7 L0 V2 @1 g2 j9 gstatic struct gpio_led da850_evm_tl_leds[] = {; F3 v6 C ^- C% |1 X
{
8 P+ N( X( e4 d. p .active_low = 0,
" z- _) r% A' {$ N/ {- l .gpio = DA850_USER_LED0,! p$ N. o# S' Q! C9 s% v
.name = "user_led0",0 Y3 v2 y; v7 d: p
.default_trigger = "default-on",
7 g9 F: N; Z* ~' K4 b },0 |$ z* t9 w, s0 k O% P- I
{
( C2 n% r( F( M .active_low = 0,
' Z M. A, e1 O( x( d' b .gpio = DA850_USER_LED1,
t: x L0 v9 m4 k/ z .name = "user_led1",
( F* [/ K4 {' g7 |+ |/ h. f4 M .default_trigger = "default-on",* [1 L* I" T/ Y. ]6 _7 U
},) C7 E2 Q5 | W6 \5 J# Q- o b# Z
{# s0 A5 a2 Y* V0 H
.active_low = 0,
7 j m( o; p8 }$ _5 u .gpio = DA850_USER_LED2,
( l/ z& M- R) J3 X7 Y .name = "user_led2",/ e) K1 X' U* A% y& d: z
.default_trigger = "default-on",
' ?4 H, p- y" w) L0 c ~1 v },
# j' p* z& L8 z {! i6 @; G- P6 T, k0 i6 Y* c
.active_low = 0,
9 j g. o. V- U: `9 b( q0 [' ^5 f .gpio = DA850_USER_LED3,1 C9 c9 J8 A& A6 I5 L2 v
.name = "user_led3",2 G- \) }4 T5 _( f P: |
.default_trigger = "default-on",
+ ?% S+ e/ W; q9 X0 c7 W& f },
& d0 I$ c2 C/ U8 f) S0 ?# G};
/ x8 R ]( U) h5 Y3 s' Q0 y I" L, j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; z5 Q. t9 s, M0 ^) x .leds = da850_evm_tl_leds,. }# t' `' @3 @$ R- |1 I/ {0 |9 q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" H% t& p- |6 e: L3 U};
0 Q N& Q' L- n/ Z1 q1 @/ Y. A! F
$ U9 ~# m& n# U& g2 w: dstatic void led_dev_release(struct device *dev)1 d; \+ S2 P6 d
{1 w8 Y" F# i9 L3 K
};( W. P5 u& N" S& o) J
% ?+ K" n m" e9 f8 \. \$ g
static struct platform_device da850_evm_tl_leds_device = {0 R6 P9 J) K Z9 {4 g2 ?# j
.name = "leds-gpio",+ a4 ]) `; z K& f, @6 N" t
.id = 1,
, @2 J5 r1 z0 G7 H .dev = {7 ?, R1 ?7 {3 a; d1 c0 w
.platform_data = &da850_evm_tl_leds_pdata," k4 n1 m+ P8 Q9 l) w* ]
.release = led_dev_release,$ ^% t2 z1 e8 Q8 D" j# P- Z. ]* J$ W; W
}* d$ g5 I$ C4 {+ I$ s$ I
};
1 M( N, ]* ]( g8 {# m$ e8 ^! e5 V6 j
static int __init led_platform_init(void)
( a1 w2 M1 E: F7 K{
: U. F( k" y! S" n1 N int ret;
/ D1 ?0 R1 y" I! f8 f#if 0, F% p* M% B% M5 G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 f- y8 `0 Y$ R( k! U- V9 F if (ret)
R6 J( v- i+ z( y6 K( T. p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" n: `% |# Z% k! M+ Y
"%d\n", ret);
( \$ G+ g! G( l. E% g#endif
) a, {+ T& k- x& h' z8 F4 A ret = platform_device_register(&da850_evm_tl_leds_device);
7 ]* s' [1 y6 Z. H C/ @# E' D+ q if (ret)
6 Z7 i* y* ~7 R9 z# W! U0 ` pr_warning("Could not register som GPIO expander LEDS");
! f8 X% w/ u) H1 @" b# R else/ ^- @( j7 Q2 P- i
printk(KERN_INFO "LED register sucessful!\n");
2 `: m* }+ Y Q( E/ z- {
! `: D/ J; u1 }" G; l" {* X return ret;' y( V0 }1 u9 d7 f
}5 Q+ K! [7 Q! t- G3 r
* f. s+ i' C9 _0 D3 w- i# x
static void __exit led_platform_exit(void)/ A8 r* m3 O8 }$ Y* W
{- ?# P! X0 u4 ]2 L: n! u0 K
platform_device_unregister(&da850_evm_tl_leds_device);' T" z. m/ [3 I& G
2 p) W1 r+ \2 E6 }
printk(KERN_INFO "LED unregister!\n");0 t/ \9 A2 C1 m2 r5 i1 s" e' q
}
& a4 q& C& {! G& W7 k
# r2 ~( I5 d" U1 c5 |" umodule_init(led_platform_init);
5 n: |4 ]+ m' Cmodule_exit(led_platform_exit);: p2 l* f. V$ y
& g6 c8 W& b4 B* r
MODULE_DESCRIPTION("Led platform driver");' k* P1 A Q3 t+ e! _( i
MODULE_AUTHOR("Tronlong");% X6 t0 Z$ J8 `. [4 K, I
MODULE_LICENSE("GPL");& v* ^' A# V8 z8 [7 z
% A4 f- O9 n% [$ i7 o |
|