|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 f: M) ~2 K: ?4 r#include <linux/init.h>2 z8 B; L8 G5 N7 Z7 @' S
#include <linux/module.h>; \( p) r( V/ f! C" |6 j1 L+ l! a
#include <linux/kernel.h>4 z, l) ~: l4 M
#include <linux/types.h>
, U: p; n7 U8 n8 \#include <linux/gpio.h>
1 W u1 C) W( G; }! H" |4 t#include <linux/leds.h>
& [1 ], {0 E \$ ~ [1 ~#include <linux/platform_device.h>/ ^+ {' g" B$ W* P! r) H3 N
2 ?! Q* U! N$ z6 r& H#include <asm/mach-types.h>( W: d) n/ a. U: g/ i4 J" }$ V
#include <asm/mach/arch.h>
0 G. C: H" F- I- H1 B#include <mach/da8xx.h>
( {7 Z" _; i( e. }3 u#include <mach/mux.h># O* M+ d$ f1 I
, b. m- O: | |5 E! A; T! ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 U- i$ R5 J7 p7 \#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 d& }7 r( C6 F#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 c; }* C* S) j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 ~- }, n8 p5 W# ^0 o& I( A3 b8 p
/* assign the tl som board LED-GPIOs*/
4 ^ ?5 r8 N; N. _+ [1 p; }static const short da850_evm_tl_user_led_pins[] = {
+ J2 i' o* u& t. \0 h /* These pins are definition at <mach/mux.h> file */& Y4 D$ [% z1 N, J# D) c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, }3 G% |% Z! `% R U1 o
-1
; d* B- J& a6 O0 W9 G};0 q# S) P1 w! [& x* }; [4 K4 c) q
# v$ P$ b1 [% y, J
static struct gpio_led da850_evm_tl_leds[] = {8 w/ C& h ~/ |, K7 ], z$ Y
{
6 b3 B* F+ G9 m; ~- q+ F7 A2 | .active_low = 0,
2 C5 ~7 R, I: R2 W# o2 M .gpio = DA850_USER_LED0,
( S6 g4 M5 O n& J/ J' ]/ @( a .name = "user_led0",/ s L3 Q3 r3 C* V! D
.default_trigger = "default-on",. S- p. A( M% h7 l- ~5 H6 R. E
},
]1 F: q$ q, d9 P5 C* W G {2 P! k Z( |+ P* C6 p7 @
.active_low = 0,
F0 b& Q: f2 l p. \) H: r5 i .gpio = DA850_USER_LED1,+ C) x7 V- D% e
.name = "user_led1",* n% w0 w4 T& Z! J) o" P j
.default_trigger = "default-on",
; _) `2 Y0 ?9 ~- W% t& F1 }* \ },* Y7 L; U- l X4 v- g
{% k P4 I7 O2 j/ ^% Z/ u
.active_low = 0,
' y, C0 Q9 ]6 E2 M5 B .gpio = DA850_USER_LED2,
( i/ D1 l+ R$ n* a .name = "user_led2",
& T+ W. D' ]8 x6 x* g' m7 w+ @ .default_trigger = "default-on",! Y \9 s2 f7 p" q
},
9 y$ P1 G8 u2 O' _: \ Q {: C7 @! L4 Z2 t2 o, `: f
.active_low = 0,2 o* d# Q5 }0 \! }; r1 z6 P$ g1 B1 o
.gpio = DA850_USER_LED3,
: J" ]; A( e. Q .name = "user_led3",
3 Z; P+ |) ` Y( A( H# ^; o* G .default_trigger = "default-on",
! u, L% o6 d% ?$ }+ V2 r) | },
% w+ G( C3 b5 I, h! _};
* s3 ~( e& U5 _, f8 x
9 R% y3 K; x8 u% wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = { i1 U- n+ M& d. {6 v8 p0 e$ t
.leds = da850_evm_tl_leds,
$ z t% B- \/ B; F: W) P2 H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' h: H* L. b, s" e$ H6 s C};( A- E0 C# {0 {0 G# W
1 t/ |/ [2 f; B0 P; X# j& v% }
static void led_dev_release(struct device *dev)
# H/ v. F+ X7 I{
: x: ~* {, z0 M+ v! C1 c0 F};% N; n7 |. X. [( Q$ x
) z+ B: p8 H; @( f- K1 Y5 O% Pstatic struct platform_device da850_evm_tl_leds_device = {
7 b3 w: N2 e) ]8 | .name = "leds-gpio",5 H: |" g! A' e, A* E4 |
.id = 1,; \& p, z p+ l3 |5 {4 {
.dev = {
: b4 ?4 E- G2 F& r- z- }2 j9 z .platform_data = &da850_evm_tl_leds_pdata,* x& l5 m3 ~$ Q# j6 }* B
.release = led_dev_release,
* r- p' k! m+ P& w" {4 @ } Y* }) C4 }) M2 S; m1 f
};8 w/ U& H1 Q7 v' X# Y2 E- r
/ y: W& F+ T7 t. H' T( I- kstatic int __init led_platform_init(void)
% t5 G, }7 C; J- \+ C{
7 G% f$ o9 q6 z; f6 e- d* Z int ret;, V! k$ \( }5 q7 l
#if 0+ T' H- g2 q6 Z4 ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 O n& I% `4 n1 _% | if (ret)
" I' u- j1 E0 P/ w5 i ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 T8 u' N1 ?! ^. z0 ~/ c" X0 Q
"%d\n", ret);
- D# C" E) q5 l1 w; u#endif
0 C( _& B& R/ Q W2 D ret = platform_device_register(&da850_evm_tl_leds_device);* W7 ^% V P% i$ ^" g0 m& o
if (ret) k s1 H! F" V0 e+ d1 e$ E4 a' x
pr_warning("Could not register som GPIO expander LEDS");7 W4 w7 o# R7 w, ^3 k5 ~5 y- c- B
else
/ e; w- M4 [* o& E% Y printk(KERN_INFO "LED register sucessful!\n");
2 I& X9 D1 e: a1 V
% w4 ~5 j" b. p, ] return ret;
1 G. X( |( Y5 {}1 V; u4 C! e+ _9 c3 ~2 x ~9 D1 E; j
/ N! @5 w K3 l5 z% Y! t/ \
static void __exit led_platform_exit(void). r: V. ]% t* _$ E0 T2 I# ?1 S) ?6 ~
{/ ^1 f/ ]( `$ z
platform_device_unregister(&da850_evm_tl_leds_device);% G% C1 `2 {2 A; t1 T$ l
" {. R" B4 G# ]7 G! K" {4 O printk(KERN_INFO "LED unregister!\n");- k+ P! K" w$ E# d R5 g. }2 p. `
}
' f. C3 @: j2 h/ z" n5 E& s
7 s* f! j5 N$ k2 Jmodule_init(led_platform_init);3 a: ^- z$ r$ |1 @5 e" S
module_exit(led_platform_exit);* O- \4 }9 s) W% ^
* \! V( g2 Q8 `) P) EMODULE_DESCRIPTION("Led platform driver");" y; Y0 O( l3 ~( U& `4 J
MODULE_AUTHOR("Tronlong");- n- D W! ~( Z! f' O
MODULE_LICENSE("GPL");$ y5 F: n" ?% Y" n! m) T
x. {' X; t# N
|
|