|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% S, {8 C4 T/ |, _+ `
#include <linux/init.h>
7 a. T1 `" h! A% j( }4 U#include <linux/module.h>
' A6 X% s3 X: o' ^* [: J#include <linux/kernel.h># w' ?* U- [+ s+ C# O( M) ?
#include <linux/types.h>; ? M& b4 i+ v5 ]0 J
#include <linux/gpio.h>
- o- e1 Z0 B) \. u. s#include <linux/leds.h>) L; y k0 Y# i4 n
#include <linux/platform_device.h>
5 U/ r6 U( x; V5 Q5 V+ ]4 y. E# z# F% v3 U6 w7 a- R. {
#include <asm/mach-types.h>
, |- x# C# b7 ^- [, e) O( v#include <asm/mach/arch.h># A( ?( |' Q: M5 G1 V5 }
#include <mach/da8xx.h>% k8 x' Y$ H1 P3 z
#include <mach/mux.h>
6 w X2 e$ s6 E9 }2 F: D; `' q9 s7 @4 I+ T. g
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 H# x( T/ Y: L6 R#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% ]9 V5 J/ d. P9 L& X#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 f/ E' k* q! t' }3 y2 {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' Z# w/ ?7 _( \& K6 _" M
# s6 R O0 E, P0 o9 k( ^- ~6 H+ [/* assign the tl som board LED-GPIOs*/
) n, _ G5 M- t9 |static const short da850_evm_tl_user_led_pins[] = {
# j$ l4 K4 \# M6 e+ } /* These pins are definition at <mach/mux.h> file */
7 Q# u- `$ X5 ^7 \ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ \( L0 h2 U+ s* q -1) v0 \ h5 X8 N
};
3 h4 m! w$ K& P \! q( n& U% q5 B; b. |
static struct gpio_led da850_evm_tl_leds[] = {
: J, J* O& C4 H v3 s {8 }3 U8 Y; L3 u
.active_low = 0,' y& Y. i# e. H9 [
.gpio = DA850_USER_LED0,
. M1 T6 }: X& r+ ]6 N .name = "user_led0", k. d8 }6 [; m9 m. j1 y
.default_trigger = "default-on",' l: R. ?! J. U$ ?, W
},
4 X% ?% Q# W9 C0 w {0 Q6 Z5 {; h7 ^) y8 @! C% Y4 V3 d& }- z
.active_low = 0,
! D( W* p9 Q, L. n .gpio = DA850_USER_LED1,0 s6 A# e$ F0 X: `8 k
.name = "user_led1",1 ^, U( _! X: Y; `
.default_trigger = "default-on",
4 g% |$ B) h9 l5 k },( E. ]- p. j$ m) V( t0 o
{4 X0 ]# S) }# y4 \: w
.active_low = 0,
6 Q; v: Q% B0 N; C* v, M3 H .gpio = DA850_USER_LED2,. B* Y% u' \8 X, t% O) A. S8 q
.name = "user_led2",
7 ]( n V ^, E/ } .default_trigger = "default-on",* A8 q' |! A5 L# g
},
1 D$ m, g) V: L+ d6 P- O* Q. r {
1 z% b3 L8 A$ n5 I4 P" h1 c .active_low = 0,
8 d4 ]9 x4 Q8 e0 `6 p .gpio = DA850_USER_LED3,
2 L8 Z$ M' d) _* [ .name = "user_led3",
y1 P! y. B7 A6 x! l( H .default_trigger = "default-on",
: N1 ?0 P3 H/ l. M },( n1 D1 ]% m% y" J& t
};
( H: [( m6 z1 N L: V4 a4 P9 P3 I5 R+ i+ G: Q) ?9 }, Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { K Q# ]% O7 Z4 t3 G, c/ }
.leds = da850_evm_tl_leds,7 y7 I! q& n; y Y/ w% v/ Y* K
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# I, h5 o: m$ c: Q
};
8 P* o2 h9 e( g- L% J
1 y' v1 S6 B/ m3 m: Bstatic void led_dev_release(struct device *dev)+ @/ ^" [6 }8 H2 o1 @7 y9 s& Z( @! ?
{
4 A4 n$ p* z4 r3 p4 U$ T};) u9 C, K# L9 F/ |5 Z6 q* f, }2 ^
( g6 y0 _# r6 B9 _# N R
static struct platform_device da850_evm_tl_leds_device = {
9 }' n, ]9 W/ x .name = "leds-gpio"," P) ^# Q4 R" I
.id = 1,0 R1 q0 ]! _! A+ Q W$ i8 |
.dev = {
/ d9 Q1 T/ y7 j/ Q( ^ .platform_data = &da850_evm_tl_leds_pdata,- k' U1 @! F a8 K+ l# c/ K: e" u! V
.release = led_dev_release,
2 j ^2 T6 i5 Y }
3 i& N/ V9 h" U$ B};
; W r& L* a6 e9 n% {$ D. j: `7 ?5 v+ k
static int __init led_platform_init(void)& ]7 a, S+ R( u( O% x
{# D9 L" d' Z- g" ~5 C0 C1 j6 P, y
int ret;$ h% Y* }$ {7 ?: b* @3 Q; d
#if 0. G9 |: i! L3 `% P
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" a" p, D/ a2 r; _8 J W& b3 B if (ret)1 F4 m5 t0 R& |$ G
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ G& { y9 c( f3 T4 @( ?* c
"%d\n", ret);: f! e; k, X' A8 o% }
#endif3 \, d+ A# A! o) S5 h6 j: X* A: n
ret = platform_device_register(&da850_evm_tl_leds_device);/ p) l1 V1 B- u
if (ret)
3 a! ?7 l! D" K pr_warning("Could not register som GPIO expander LEDS");
2 C, G5 ]: |9 Q else0 F/ o) d) S$ P* n* {
printk(KERN_INFO "LED register sucessful!\n");
9 r1 D4 Z! n2 K& q8 ^& E% x
- w; H8 ^6 A E6 C% I- C return ret;
J6 c* h a' F. }+ _8 t0 C}
# P0 `7 R- k6 N6 r0 `) m
( K3 W. o. b2 Z) ?# i1 pstatic void __exit led_platform_exit(void)& J& F$ F# Q% D @1 Q- f5 e
{, a$ ~5 }2 B1 S) K3 k
platform_device_unregister(&da850_evm_tl_leds_device);
3 |4 C6 ^4 Y& j1 ?% ~3 C7 v3 D& f- u3 L5 T2 c1 O" F0 X* s: P4 b) T
printk(KERN_INFO "LED unregister!\n");6 N" d* L* b7 G$ G7 \
}3 s9 g* d8 \6 q+ o) \1 C
0 Y( n% a( A5 I& B3 P; Kmodule_init(led_platform_init);
: ~# R2 M. ^3 v E2 p$ J: m; Omodule_exit(led_platform_exit);
% v* Q) Z1 a8 \% [! v
" b8 r! M7 q- B/ \) EMODULE_DESCRIPTION("Led platform driver");& }5 g4 ^+ b5 K' Q
MODULE_AUTHOR("Tronlong");
4 u) }2 V# u( C N; e# UMODULE_LICENSE("GPL"); }! R$ X# m) i; T v. a" Y+ `
" p( a: Q! A: C: n
|
|