|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
L' r4 {$ j" V#include <linux/init.h>6 s5 g; s \2 R) }2 p% ~1 Q
#include <linux/module.h>6 o5 b& k% F$ F/ u2 E6 w
#include <linux/kernel.h>! E& _# ~! v+ c N, Q" k7 s
#include <linux/types.h>
4 I6 S8 B+ f6 W7 m7 t& g#include <linux/gpio.h>
) t+ ?: v: C) v# I3 k3 ]#include <linux/leds.h>
% @+ \% m: t! s4 q. U) G" L#include <linux/platform_device.h>+ U" c) i; u, e( D
+ Z( t& q& l5 B6 }; ]1 L
#include <asm/mach-types.h>
2 E" v, d8 @: }. C+ W. I4 n# C#include <asm/mach/arch.h>
$ x! T# x4 i7 ?; f#include <mach/da8xx.h>
8 v6 r; }, L9 U1 F0 ~" x7 [#include <mach/mux.h>
K- P- t7 p8 h) |# `) d0 p2 e$ _ T4 T' j6 S9 B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 S3 F" ^, s7 n2 a/ P#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), E$ x9 |' Z1 w" h' C& [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 A1 x3 f& b2 \) K/ h: Q \8 x. \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 ]0 N6 f' F( Y! G) W! E
" d$ E; [; i! l! C5 b% M/* assign the tl som board LED-GPIOs*/. a" `4 ~ x, r* b
static const short da850_evm_tl_user_led_pins[] = {/ s2 R/ |) E6 P1 p9 h+ r& Y4 n; V
/* These pins are definition at <mach/mux.h> file */, z2 R$ H7 R) }! f
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 A8 z7 {4 O- l) V% S% H2 y -15 {: @4 g3 W* c& ^4 M6 u; r" v( P$ X; ]( m
};
# S o7 Z1 I. L6 T/ @
' C4 a& a# u2 c {2 m( Ystatic struct gpio_led da850_evm_tl_leds[] = {
! O% Q9 B; _! d# V' d& Y' |& ~6 R {
) ]4 k7 o5 Q, u& ]7 \ .active_low = 0,
) ^! |" I- o5 i0 r% N* X- S .gpio = DA850_USER_LED0,
; e7 ?% O8 G& `! y6 F& N, i .name = "user_led0",; E& d2 ?+ t2 p0 N8 |% d) W
.default_trigger = "default-on",
* a$ f0 T3 A8 a v, v" |- b },9 S) A3 _! }" { j; M
{
4 p* f# Z4 h' R( k .active_low = 0,9 M% v. x7 h% l0 N. T
.gpio = DA850_USER_LED1,0 i* R6 F' ?) i+ }: }% n* T& c
.name = "user_led1",
3 U' U% U @2 T- x( j# p .default_trigger = "default-on",
: Q3 g+ c( V3 M$ z; p },
, c/ o3 m. V k( |5 J {
$ F: w) X: V6 Y5 K4 p$ V .active_low = 0,
6 o" Q: p) x& G/ d2 t; ]7 `5 G .gpio = DA850_USER_LED2," t* [; H* y( W% L) a- s
.name = "user_led2",7 f9 Z# g- Q" p _+ X. C- n4 {
.default_trigger = "default-on",
% q$ U2 O) T" G) ^; d/ G% M) F },
: n- S3 S6 y8 {% C% V% [' X {% n3 q% W2 M o& R; Z* O( Z+ E" N" o
.active_low = 0,- m# O0 _# p3 G* x4 M5 l; q3 q ~
.gpio = DA850_USER_LED3,
4 E1 h9 S: f, U .name = "user_led3",; ~0 A" d4 E0 r3 m0 [
.default_trigger = "default-on",/ `/ T& ^/ @" l. z* R' T
},
2 C, {5 C3 [% q! k9 h6 L};
% ^1 }- s8 @0 r/ p' W# x$ G7 a! \0 X I& t$ K9 C" r9 D2 M1 b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 Q! ?4 @- A7 L+ P% Q# [ .leds = da850_evm_tl_leds,
* z$ q* k: N# l1 ^7 |6 V .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# M4 g$ ^& s2 o1 f- z1 ~$ J
};
( i$ X) m" D" }# ^* j9 `0 N8 ?" @+ S: _
static void led_dev_release(struct device *dev)
5 `. G' L8 U; f" l. u p{
2 k" C- j& t( m7 A' w9 W};. J3 E" y3 U% s8 k5 n* N, x, e
& U; c" A4 W) J3 P/ N1 ?+ d3 m
static struct platform_device da850_evm_tl_leds_device = {
0 w! K- l/ q8 _6 m, l+ {! ~ .name = "leds-gpio",9 ]: G- l3 n* T- H" G
.id = 1,/ g9 b3 G8 W/ z' M" A" [
.dev = {
2 n _) m- B( \" F! g0 i% f) M .platform_data = &da850_evm_tl_leds_pdata,; j( [( j$ k- l3 \, A$ R4 H- s+ W
.release = led_dev_release,* B" S. n$ w P% ^: j4 y" u
}0 L6 P9 H6 o3 P
};
2 U# F! D' X& g! U
: r' W# }1 z/ U# b8 G; Kstatic int __init led_platform_init(void)( T: C b3 t3 @
{
* V/ r7 J7 p. v int ret;9 w8 R- m' u- L+ w N* L3 a( D
#if 0
5 g# Z7 r& A& I% r3 P7 w: v0 o7 L ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# w/ r, k3 T9 }1 B3 E8 {) {" Z
if (ret)+ t4 H& z9 x# Y4 X# }& y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 q; C) L; Z4 Q3 T& T
"%d\n", ret);* U3 W1 M, u& U9 w H `
#endif0 M2 J1 Q" p1 l: e2 T3 A
ret = platform_device_register(&da850_evm_tl_leds_device);: L. m7 J/ M5 Y( f2 m8 X5 t- O
if (ret)& } j& M5 V; v; P8 u5 @ d
pr_warning("Could not register som GPIO expander LEDS");2 V9 k8 w6 e) x* m9 @" M
else* `5 h; N) s/ c* k% G
printk(KERN_INFO "LED register sucessful!\n");
- b% Z; B. r3 d, O
7 c$ |( w! o$ k! F+ D/ h2 X9 @" V return ret;
3 [" K: ^& ]" l# }- E* l; b# m}
# t. D/ V8 F$ [( f" F) r( l8 j; M4 f c' u6 U4 K
static void __exit led_platform_exit(void)6 C5 H6 q; K1 P
{" k& t4 M' J4 u+ L5 ?
platform_device_unregister(&da850_evm_tl_leds_device);1 y2 g* V5 v" r& B( C, Z
. J) U" R i/ `6 B, I* x1 G printk(KERN_INFO "LED unregister!\n");
7 I7 V8 ^4 ]! O+ F}
7 q4 a2 N, F1 R4 B' W. m+ q, Q. T* R; s& E7 m" d
module_init(led_platform_init);
7 B8 |. V7 C- \module_exit(led_platform_exit);, ]# U4 ~7 ]& s# `
8 V" p( d" u! n3 L# D7 i' \; D9 cMODULE_DESCRIPTION("Led platform driver");
4 F) K& n5 H% P. bMODULE_AUTHOR("Tronlong");
3 P$ _4 H( V. {7 fMODULE_LICENSE("GPL");3 P$ b, W1 D, s H6 ?3 W
, s! v3 o) \ B) c3 A |
|