|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& ^$ o7 x3 v& ~0 ]* Z1 a) v#include <linux/init.h>5 X0 D9 I J x U2 }
#include <linux/module.h>; B2 N# Z! x; t
#include <linux/kernel.h># s$ q5 J4 p: T4 O1 X
#include <linux/types.h>( [9 _3 M! V9 {; m' p
#include <linux/gpio.h>6 r3 j1 p( n; P6 o; u. Y: |
#include <linux/leds.h>
" H5 k% N0 ^! c! D5 e#include <linux/platform_device.h>; X( N: z; W" t5 ?! N R! X( b. Z
2 Y! Z0 x7 x- W6 Z$ |4 r9 J1 I. v& B
#include <asm/mach-types.h>7 v+ B& Q* E3 l; N7 u7 f8 C
#include <asm/mach/arch.h>& [9 j) d/ Y* G0 v
#include <mach/da8xx.h>
% e" W; v1 S. Q. V# O/ r#include <mach/mux.h># Q# a* x$ n, n1 ^1 V
) M/ H' B/ I9 Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 g, n/ ~6 K8 d3 o* Z- ]6 r3 R! f
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" G+ \) f* l& {0 Q! _# P0 f# o#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ Y) B% d& @0 h6 x$ q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 V* ]- a$ P7 R
- H+ R6 R" d$ u
/* assign the tl som board LED-GPIOs*/2 p3 d8 {9 @) I: E
static const short da850_evm_tl_user_led_pins[] = {
+ [, C8 d8 N: Z( i /* These pins are definition at <mach/mux.h> file */# {1 k# n, K( y4 @4 e U$ m! \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 k) }! o1 V6 i( r7 ]9 t# e* d -1
5 `7 j- q; t$ F5 _};& z$ n6 [4 a2 q! h
/ L0 a+ }$ e2 K, h( e% P' ]
static struct gpio_led da850_evm_tl_leds[] = {
* p9 `# l0 X4 p1 ?) N {
4 {* `' @2 ^" S, p: t) [4 T .active_low = 0,# f8 `, M, g1 W" ]
.gpio = DA850_USER_LED0,
. z* C" I5 B- g# u8 t2 h .name = "user_led0",4 m7 u/ T+ I/ L8 K
.default_trigger = "default-on", Q/ H; g; @; m/ m" i& ]( v/ Z( X
},0 ]. [5 x4 Z" m5 n; F3 i
{
; v1 m: ^* p3 ]. Z. J+ G$ k4 J8 A .active_low = 0,/ l' N9 ~0 U/ E: s; X- f7 N' {7 T
.gpio = DA850_USER_LED1,
) @: B7 [2 y2 [5 R1 u2 ]) _$ G .name = "user_led1",8 t# J2 Y+ m$ Z
.default_trigger = "default-on",
) z, A$ E! P0 A5 C$ O },& T+ G: U/ @- l# l6 O
{( d$ [; A. [7 O1 u( m& ]8 R1 T
.active_low = 0,6 l4 _! P& u& C: _3 b0 c8 B! G
.gpio = DA850_USER_LED2,/ k" n2 c& }5 _! Q- P! k
.name = "user_led2",% S: w8 X1 @1 d w+ g
.default_trigger = "default-on",
6 a0 v- o4 T: i" D: E7 ^4 m },
. j1 C9 C: ^1 M$ m3 Z) S" { {
9 y3 L' P; [; @6 S, L .active_low = 0,7 K1 Q2 A4 B0 d& g b
.gpio = DA850_USER_LED3,
; A: c) s& z- ]7 z .name = "user_led3",
( O `/ K* o6 Q }/ T3 y; [; g0 Q .default_trigger = "default-on",6 `7 c2 r1 J3 A2 \
},; b+ t. I7 L' f2 P5 U2 Y4 M4 f
};
- M" O1 \1 x3 N. d
8 j+ l% L. ^" k- {. x$ ]+ o( Jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: X) h9 [" a/ C# A9 `; E6 q .leds = da850_evm_tl_leds,
0 v @1 X7 k i1 } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 [8 R) w6 ~1 S+ g! x8 E* n+ j) T};% I2 n6 K* B/ Z, X4 i: k( p6 w
/ h0 ~2 P' @3 X: ? e) B
static void led_dev_release(struct device *dev)! W6 T- g# v6 F
{
5 Y% P# [$ e- F1 }( I6 P* c};
& ]! M0 f! h9 Z3 ~
2 V: Q" f. ~0 @6 r$ l* B; sstatic struct platform_device da850_evm_tl_leds_device = {& Y; r/ ^& V+ M5 V
.name = "leds-gpio",) p( `5 i0 M1 }' l! I
.id = 1,; H/ }5 b/ E$ }# `7 w4 h: T# c
.dev = {& X: a8 Y2 x7 x2 P+ W+ c3 v
.platform_data = &da850_evm_tl_leds_pdata,
1 q! _1 O/ Z+ d4 _% A4 m7 M .release = led_dev_release,$ Z- S k9 B6 o! M# u
}
3 I/ X' H4 j$ o& W};- ~0 e) U$ h3 }, V# v
) D" ?& }' t7 J+ q! [static int __init led_platform_init(void)7 U( p. M/ L6 U' t5 k t
{5 G9 ^% ?. }( O( \$ d8 H
int ret;- u( D! L7 D$ D, [8 ~6 v& C" C
#if 02 B5 Z5 _! @. r* o4 v j; o! E
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 B2 G& \: S7 o& C1 w
if (ret); y! N; D* ^+ I
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 @* l! H1 L- {9 I "%d\n", ret);
, j) R) ?# ^' y3 M' B& R#endif$ l9 f; Z5 U. g7 U0 b! W/ j
ret = platform_device_register(&da850_evm_tl_leds_device);7 z; C( y, v3 [/ Q4 o7 d: p
if (ret)
& p R% l8 c6 e7 u' ]6 i8 `; g pr_warning("Could not register som GPIO expander LEDS");
; t1 R' i! f( K& s v1 x+ l0 } else5 e) N9 l* g. K( d
printk(KERN_INFO "LED register sucessful!\n");/ ^ V5 w9 Y; y( a' u
9 A' H4 d. x/ U6 X4 t; t return ret;3 t4 H1 _/ e/ s4 G; S1 u: h& w! g
}
( k3 i5 s9 ^" M$ V- K/ L ]' ?/ X2 o; P' l0 p+ i* \7 R5 m
static void __exit led_platform_exit(void)6 l+ X! H& b% `, H4 O b+ X
{9 u& w+ y& `% c ?8 F
platform_device_unregister(&da850_evm_tl_leds_device);
5 j' `# ]' [* j4 O5 }
$ o* x1 u5 L6 Y0 x- |( r printk(KERN_INFO "LED unregister!\n");. C6 T( L* ?& Q4 l
}5 a; q. ]& k9 w: N
3 t: q2 [$ d" P; X5 W
module_init(led_platform_init);9 z7 x0 m# z( g# K) {6 M( r7 a
module_exit(led_platform_exit);: n* b* N% x \
* f. Z4 G( g$ z% {5 c, F
MODULE_DESCRIPTION("Led platform driver");
4 \- _. I& u' Z Z8 n' LMODULE_AUTHOR("Tronlong");
) g; E3 O4 W- O7 c: J! F- i9 AMODULE_LICENSE("GPL");/ O' ]2 Z) P0 n
: ~2 L4 u$ y' F% y |
|