|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% ^0 F5 G& j, q: N( j#include <linux/init.h>
3 a, y V4 ~: E( u% y5 ?& r5 N( {#include <linux/module.h># B; p7 n4 [. J# c
#include <linux/kernel.h>6 \$ N2 ?/ x) r
#include <linux/types.h>9 g: D! U4 {- V- r' }$ q `: U
#include <linux/gpio.h>6 ?. u: i8 B1 x
#include <linux/leds.h>6 \' d4 M8 z9 l v2 w. |7 U# O3 `
#include <linux/platform_device.h>
& E4 ?2 v8 Y! m9 x4 _4 x; p$ L, v, G" W: X9 U: t3 ~6 L6 }) n3 S2 l
#include <asm/mach-types.h>7 h% `+ j c2 W) a$ Z; ]% u
#include <asm/mach/arch.h>
! O$ `6 A; e1 I# R. P$ }#include <mach/da8xx.h>
2 N# w3 ~7 e8 s+ m4 ~#include <mach/mux.h>
9 Y- Z: B6 B3 G. Y6 e' q. ]' c7 S5 T: L+ S% w
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 X6 I- n* ~; ?0 F7 [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 m2 n& z ^6 _# K4 A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) n% c) n. ? E) Y% @! r! T. G5 E8 p! [#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ Z5 b( O% z0 r* g. ~7 x1 @% l% j& e6 U
/* assign the tl som board LED-GPIOs*/# _# ~ V( V! c# i# L: @
static const short da850_evm_tl_user_led_pins[] = {$ Z4 V# `3 N: ^: ^ O' w
/* These pins are definition at <mach/mux.h> file */) g2 G2 N8 @" x) Z* h
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 s5 F$ K+ v, Q+ P7 N3 T3 x! K9 I
-1
, C* h* o' A) _2 ^6 T e$ h};
5 R- v0 W( s& x5 B, }: F. x
0 k$ D7 g1 A! N" T4 F, hstatic struct gpio_led da850_evm_tl_leds[] = {
5 A# _+ c8 Z) ?7 t% A5 e" D5 E {
" P% A, |) {& N; M L7 |9 Q .active_low = 0,
+ a" s5 J) I7 y% \ I8 U/ l .gpio = DA850_USER_LED0,
1 }& V6 [# x: q1 Z, A& u/ b .name = "user_led0",+ t ]' R& G+ A; u9 A
.default_trigger = "default-on",
+ t+ P( Y, v: \& ^ },; f1 o$ |9 t# G4 t
{
7 C% i1 H, q T e .active_low = 0,3 n6 P# `$ g; g E
.gpio = DA850_USER_LED1,
, g& N- i# w8 g' \ .name = "user_led1",
% a# Z2 B+ v/ s' z3 \& T .default_trigger = "default-on",
5 o) {* t% S& `9 i9 M0 u },2 P; j* T( }8 L2 k; J
{8 f& \# y1 H9 ~0 u/ d; M5 k( N7 w
.active_low = 0,
9 e0 O% {. i9 Z/ x0 l, P9 Z% D4 c .gpio = DA850_USER_LED2,1 z; Y8 ^' \% C f
.name = "user_led2",
5 r. D2 g) R8 `! A/ V! W7 u .default_trigger = "default-on",
- i# w+ K9 D2 k- g$ k P },
, c- n# j5 Y* G* a7 |* x9 S5 f4 ~ {1 T& U" q! ^/ \/ _6 q
.active_low = 0,
; a7 H) o4 o+ O/ y7 T; M" i .gpio = DA850_USER_LED3,7 y+ S6 @( J2 x0 J% f
.name = "user_led3",! m( b/ I( L1 B/ h
.default_trigger = "default-on",
5 B' B3 A, ~( S' _) w },/ J9 l; \9 @) r/ g: G# q
};
+ C& b& E- I) A% R0 j& L* s9 `% Y3 f/ b2 K% u% n$ J3 M
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. s. l& R) k: ^7 k( w
.leds = da850_evm_tl_leds,& z* g2 k7 R& a4 L+ Q: r& l* L
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 M F m% a( Q* ]/ O
};! z( y( f0 p; |$ n2 P: ~" Y7 M9 n
4 l& N% N- w; n1 h ^
static void led_dev_release(struct device *dev)& l% g: s& e% E" V) A6 o
{
( h1 j9 k' \- s4 d* d};
" D9 t; q3 j7 S9 G
' Q! C3 p/ C- i: X3 Gstatic struct platform_device da850_evm_tl_leds_device = {
- h' l# s4 U5 Q .name = "leds-gpio",# R0 _" N& h+ Z: u7 Z
.id = 1,% A: T* L6 j8 P5 a. \9 W
.dev = {
. @$ Q9 p4 x/ t5 _' T .platform_data = &da850_evm_tl_leds_pdata,
2 Y4 _; ^+ \; f$ c8 \0 E5 J .release = led_dev_release,0 L& |& e) n/ a; e8 z% p
}( S. C' h6 V' D$ W/ I. t
};% r+ Q) M/ J3 o, R5 V) V
. h& w/ @, m+ c& V3 M. Y
static int __init led_platform_init(void)
. O- {9 v% l2 F- r% ]{/ @2 o2 E5 M/ {9 o( c
int ret;
u# }( ^" g& z#if 04 G" [: }( v: d. U/ K; b& V4 }: Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# T$ D% p6 y( H9 ?0 w5 e
if (ret)1 v) n9 F6 y2 a d2 [5 c; j- b+ \ z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' K) @% v/ I. |* x3 v
"%d\n", ret);
' p5 d4 m% n+ ]! L#endif
* g0 ^; a: w0 ?% g+ s% H( D& W4 X ret = platform_device_register(&da850_evm_tl_leds_device);
/ @0 O; C/ S; B4 _4 Q if (ret)0 u: l) K! e% P1 J
pr_warning("Could not register som GPIO expander LEDS");6 B6 j* t: H- R1 H2 U+ k+ W% B
else
K- j9 w8 a# R printk(KERN_INFO "LED register sucessful!\n");* l. s3 r4 o' [ p/ c5 Z8 X- K c1 Y# j6 N
. R7 X8 V) `2 R" C: f return ret;
2 y* u0 ]7 k. x2 P6 D, W}
9 J& M- U3 P% [3 p6 j* n8 N+ k' w# v# ]7 h1 [4 ~" r8 B
static void __exit led_platform_exit(void)& P- T! @/ v' K5 y/ H6 N
{
. c. D8 I( f1 a) x; @0 v platform_device_unregister(&da850_evm_tl_leds_device);3 T( ]4 W1 q( R* ^' e5 E! ?5 h
+ q" x% b8 \; X4 P ]8 ^% ^
printk(KERN_INFO "LED unregister!\n");! _ Y& m, q0 O
}
; r' @4 N7 i2 V/ \% S+ @6 e
" ^% X) ]5 _. N9 C. s8 Pmodule_init(led_platform_init);$ c* D, {) d3 l9 W4 Y1 r2 H
module_exit(led_platform_exit);- c* I) H+ \6 N( [
! ?1 U. \5 A2 p$ ]$ L
MODULE_DESCRIPTION("Led platform driver");7 [- H1 [8 ^: @8 S
MODULE_AUTHOR("Tronlong");
. r5 z0 o% C( R' J: f! ~: ?MODULE_LICENSE("GPL");$ M: w( s6 H% I
" i5 A/ @; ?" I. Q9 h
|
|