|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& t: D5 w5 {0 d# w* ^
#include <linux/init.h>
B; O9 ?8 q' i2 r) }! a#include <linux/module.h>$ o X' a* m7 b8 p
#include <linux/kernel.h>8 m: M) k/ F$ {) R
#include <linux/types.h>, N; n7 z* D8 m0 p3 d6 S& K/ e1 f
#include <linux/gpio.h>1 ~8 g1 N' @6 [1 D9 E! o+ z9 `
#include <linux/leds.h>2 M& t. R9 U; ~1 _3 ?+ d) z; Y
#include <linux/platform_device.h>
( z5 _% g9 w! w4 l- {4 I: ?+ T k+ L# `& w1 Z1 ?- h
#include <asm/mach-types.h>2 d0 D6 I- P; ^% e7 Y! `2 R' a
#include <asm/mach/arch.h>
3 E( Q) V! @1 F3 @* M#include <mach/da8xx.h>
# f7 T: d) y8 B4 c( R2 u& T$ x#include <mach/mux.h>
+ F/ A7 X2 f# q$ w0 D; [' b5 a1 c7 }* r' s$ |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 Q2 i0 s) [$ o% C3 |5 v# X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), Z& s# K ]- o+ M8 {& u
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# W$ E1 u! T, n7 k0 |6 v#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ ~' [. R% C6 B8 r4 W' X2 t/ K9 M* I3 {( m/ p& I
/* assign the tl som board LED-GPIOs*/$ y+ m( w6 Y+ C
static const short da850_evm_tl_user_led_pins[] = {
" J2 |+ t [! |1 g /* These pins are definition at <mach/mux.h> file */
3 i& w# `) n& P9 U! w U% w+ U) l DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; q+ I7 n. A! x5 K) Q2 x+ Z5 C
-1
. k) v- J5 I. s2 E5 p};4 f, ` ^2 m- R4 W+ q, N
# l5 v0 p/ Q9 X2 Y, Y
static struct gpio_led da850_evm_tl_leds[] = {2 k$ t" R+ u: P2 m3 m; Y, E
{* ]6 n; F% e. S' I
.active_low = 0,
; U6 Y) ]5 e0 w' `* x .gpio = DA850_USER_LED0,( _9 P9 N8 U& @- l1 @) A" Y J
.name = "user_led0",
2 r* ]. j2 \- Q& C1 I7 U+ Z* h .default_trigger = "default-on",
' s. Q7 r: N" v# g$ Z },
+ A4 p9 q* `- P8 l; I {
6 G6 j8 X: o& N$ w' L4 m .active_low = 0,0 t/ Z- C) g* N; Q; P: p
.gpio = DA850_USER_LED1,+ o( t* p! M$ |
.name = "user_led1",, C, b& b: r Q' J1 T: U
.default_trigger = "default-on",& h, k$ J6 V& h3 P H8 g
},
4 q7 E5 K$ g5 G2 `; n# S {9 _- M2 ?; p: j0 S. ?$ o% H
.active_low = 0,
1 T5 q3 j3 T" X- m .gpio = DA850_USER_LED2,
9 ^0 G2 L+ `: \' \5 B& m7 e .name = "user_led2",
' E% V* s9 f& N% e9 A0 x+ L! X .default_trigger = "default-on",
1 n( Y% `& Q& C* @0 { },
! m: {* M5 |( |( E {* }0 @2 i; ^. w3 U
.active_low = 0, B- n+ f" j5 A
.gpio = DA850_USER_LED3, `. Z$ q' A a& r( m1 q
.name = "user_led3",
% W; s& ], [3 S; A3 Z5 ^: n6 p1 d .default_trigger = "default-on",: b8 \2 R: ~! J. E" M) V; G
},. e2 M" M2 @0 t& v4 ~
};0 H$ K( g3 N- S! v! s* [4 l
% s9 K" G# K! {8 Y# {$ ]" U- {/ L4 Q x
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 {# T# B' X0 G* r3 v4 E( n .leds = da850_evm_tl_leds,
" J- A' o1 J8 d/ y" |5 b6 q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' K8 ]& N/ V2 R- C' D7 ]};
% }- g" u; X& o9 i$ b
3 g8 F5 s z0 C0 {3 I% @$ b! Rstatic void led_dev_release(struct device *dev)
: R1 v6 i' P; Q. M{
2 X) i$ Z% \; ]3 K, N( Y};# F# @3 d7 j5 v1 l7 `& Z1 a
0 r: U+ ?. B$ f) ?+ z
static struct platform_device da850_evm_tl_leds_device = {/ l5 ~4 _# h6 ]9 o
.name = "leds-gpio",2 C, D& \: a' G
.id = 1,+ t' O" ?; {4 s1 ~
.dev = {
1 X+ n7 R' e( G) b% L* v .platform_data = &da850_evm_tl_leds_pdata,8 B9 W* t1 Z3 y$ U( ^' B
.release = led_dev_release,3 D% _# I! k% b* t& r
}
; Z8 @" q9 K/ S1 W};
7 D9 M4 L5 @: z* _8 e* s
+ m2 p" _- K2 e2 A/ _static int __init led_platform_init(void), z9 G. k7 c- Q3 Q( s* ~' n' J
{
# o4 Y3 E. r7 F7 c7 X: D( o; Z- J" t int ret;
( U8 E5 p' f3 m7 p#if 0
: c' e+ ?" x9 a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' M! P0 _+ A+ I7 Y if (ret)
6 [1 f6 {2 h; k: H% o pr_warning("da850_evm_tl_leds_init : User LED mux failed :") X# m( L6 z& ]2 B
"%d\n", ret);" D( V7 q1 F& H5 m" t
#endif0 m7 p$ j% ^5 k& N
ret = platform_device_register(&da850_evm_tl_leds_device);
7 J- Q* ^% A$ f5 E# W8 ]/ s. m# v2 [ r if (ret)# F" F9 S; J1 f% W# `9 |: H6 s: b
pr_warning("Could not register som GPIO expander LEDS");
8 x, }$ v- v9 r; L4 o5 a2 V* p! r else
4 S( j& j4 q2 d! D printk(KERN_INFO "LED register sucessful!\n");
) O" n( E% X/ @8 n) [! C8 l5 D0 V2 M, I
return ret;- d( N+ V: L1 J& l: }% D5 z
}4 ~ e+ e8 w6 l' }; `0 X8 z$ e I X
% h+ u4 G; p! F/ y2 zstatic void __exit led_platform_exit(void)$ A2 j5 ?) |3 [, Z/ s6 ^+ a9 ]
{
( {. ]* E) ^: O/ Q# k* ^1 ~ platform_device_unregister(&da850_evm_tl_leds_device);
$ N% ~+ m8 A: }+ v v+ g8 f7 ^9 [( C8 C9 \3 c
printk(KERN_INFO "LED unregister!\n");
- r% ]1 q. Z3 V- Z}
/ d& _! `* W& g: m/ ~1 p
$ j% [; S, [% f7 z" O# Jmodule_init(led_platform_init);
U3 |5 ^! I3 p( H- Umodule_exit(led_platform_exit);
" G' l2 S# R( x$ w; }/ d1 z7 D% B# \
7 j) K. a& Q% k3 }( m. [- dMODULE_DESCRIPTION("Led platform driver");
5 B% b* p& m: KMODULE_AUTHOR("Tronlong");3 C5 ?" D1 Q: Q5 x1 w+ J ?
MODULE_LICENSE("GPL");1 J; \# D- f, F' L
% |# I X+ [& P0 _
|
|