|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 { K+ N' q5 @+ d7 m
#include <linux/init.h>5 {( p3 ]. ^- k* l' k* b: W
#include <linux/module.h>$ r' \8 g# q' n( \, V
#include <linux/kernel.h>! w& x: f" y# C3 S0 f( P3 U& s0 i, T
#include <linux/types.h>. N* q$ f$ W8 B7 \
#include <linux/gpio.h>
4 Z" {" J, M9 ]+ ?$ t; C. T1 _#include <linux/leds.h>
' x* M& t" Z$ z0 k$ \+ b% H#include <linux/platform_device.h>
* a# w' _- V5 X! U2 `/ W1 `
+ G5 Z0 P$ T7 C: z- Q+ P; d#include <asm/mach-types.h>+ Q6 r' R7 }8 ?# b6 s4 `$ j
#include <asm/mach/arch.h># ^8 P; i; O# {+ l; A5 Q5 g
#include <mach/da8xx.h>8 n. e$ Z0 k B% m: i
#include <mach/mux.h>
3 F( ~& W- F P( [3 E% r) r7 |6 E! E2 z3 Q4 C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& x1 w4 c2 n ~$ x
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
b0 y3 q% A% P, q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 n3 K1 R" e) N; d# ], B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 b, R( e# A+ t0 W2 W9 \
& ^% F" y+ o- I/ Y& Y# k) _/* assign the tl som board LED-GPIOs*/. A+ |/ |# ^0 |7 T, B' g7 q
static const short da850_evm_tl_user_led_pins[] = {
; i0 [' @$ |9 i' h# | /* These pins are definition at <mach/mux.h> file */% G1 k% j9 z" F; ^, E0 y1 C
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; X: B9 j E$ L7 l -1
- L3 ~: h" A) P( _2 q# O$ y};; @5 P9 X9 A3 P7 I4 V) e( |& z
4 q# T, J7 |, `. R* q5 W1 ?
static struct gpio_led da850_evm_tl_leds[] = {
% B+ P# q8 I* C6 w H1 z {" e4 K/ z4 [3 _3 K+ W+ Z
.active_low = 0,* l! p' n6 |, ]! T
.gpio = DA850_USER_LED0,
: c' g( L z1 S* n( z .name = "user_led0",
N0 v9 t5 `9 ` .default_trigger = "default-on",1 _- E) z9 z7 E3 L7 B4 e
},
/ g- D4 I. _" O6 M9 a7 y [ { o3 }1 W% y& ^+ I0 N r$ i9 c
.active_low = 0,; S, v1 T3 H9 a3 a3 C5 L+ S# }4 v
.gpio = DA850_USER_LED1,
4 f$ F; f) y2 d% q4 V .name = "user_led1",
- u# u4 v* c" W& u0 |$ q, v$ v .default_trigger = "default-on",
. y9 a1 i6 k2 i5 Y& g },
9 E+ a/ A4 P- o. k3 f6 ~ {
$ e+ t% z& A+ Q7 `/ L( ~- a .active_low = 0,
; l' s, b/ ~! u5 V7 G .gpio = DA850_USER_LED2,6 J$ c. Z. ]$ _
.name = "user_led2",
2 ^' E" S2 ?7 e" y .default_trigger = "default-on",9 ]# K2 U* e: \
},
1 ^) Q( G$ G3 I$ U# x. h# r {
# X# h' V3 e$ y/ c" i6 a: H .active_low = 0,
5 e+ M8 t0 M. |* ]0 `! k, r( J7 M .gpio = DA850_USER_LED3,7 g, o8 ~% ^" J" v+ v2 J
.name = "user_led3",3 a0 g4 g0 `. d { ?* B, L( Q
.default_trigger = "default-on",
( D4 V$ l; z9 x# z }," T" ~7 p1 w ?7 ~. V+ X8 `
};
* u: u# o! z. B# p
$ {5 P+ ^. h) d5 \6 {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ d6 n1 i4 P, p% f* c8 m .leds = da850_evm_tl_leds,6 Q* {5 M9 @. G: A3 B$ n3 R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 `% c: q" W" K7 g2 U7 `- R( |6 T7 S
}; r' r4 Y6 u# h+ t; C# w
8 D9 S/ Z9 N' |! u. r0 C0 r
static void led_dev_release(struct device *dev)0 u, @: A+ }. c4 A$ u+ \0 t
{: Z7 }0 T! r. X; v2 |+ f
};" [7 p- H) C* v, g
B, Y/ w' }2 K: Z
static struct platform_device da850_evm_tl_leds_device = {& x0 y( Z4 P, Z1 c: b/ W) H
.name = "leds-gpio",, Z, L3 ?4 z7 V0 M
.id = 1,
- F. q4 n( f8 { Y .dev = {
; l, H! f/ z: q .platform_data = &da850_evm_tl_leds_pdata,
- U6 p/ f2 `, T. S, h .release = led_dev_release,0 g6 q/ k6 g2 l" D. l) ~+ M# s
}! o2 d( { ^9 E
};
1 e1 ~$ x2 l8 Q5 U/ i# t- z$ |0 r* e, q5 c( H, A
static int __init led_platform_init(void)
3 d( i1 h! D5 j0 F" k, m. z{& x# {% j7 h2 K
int ret;( Q6 w5 g s9 Z' a
#if 0
' H, u- N b2 C+ H. O$ ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: v: x/ Z& {* U. \* H if (ret)8 w6 M }% I" T9 ~; |9 F
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ I |# j" I9 `# N
"%d\n", ret); o2 I) Z0 M8 v: R: k8 u
#endif
8 X$ c L- U& x. |1 H) H ret = platform_device_register(&da850_evm_tl_leds_device);, u( l; w9 ~4 ?: b7 a% p
if (ret)! t& Y4 e* `( D
pr_warning("Could not register som GPIO expander LEDS");
* M3 g# @5 E0 E' ` else
- }" Y) N5 y3 ?2 W0 n- o+ b H' F printk(KERN_INFO "LED register sucessful!\n");
' y" w8 W2 m9 i( C4 q7 G# y, {0 r# o4 Q+ Q, ^$ N
return ret;' t7 R6 Y% B- C Z* O7 o: i6 d
}
( Y0 `4 i+ @3 {1 ]+ d( Y- B: u$ _& b7 _! v+ y, h
static void __exit led_platform_exit(void)) Y0 k" V$ b' Z. |" Y" L6 w
{' `" i& A W# {3 y( O5 Z
platform_device_unregister(&da850_evm_tl_leds_device);) v$ p4 Q# Z1 |( G' h! N8 I
" l. o( T' d. W4 a9 k& h, C
printk(KERN_INFO "LED unregister!\n");
5 S* ~. c% T* f) Z) \3 H5 P1 ~+ Q3 o% z}
Y/ X4 X- l& u) W) Y! Z& A& Y
4 ~. v/ A1 Y( V c) Nmodule_init(led_platform_init);
& ^* q) I& a% c Pmodule_exit(led_platform_exit);* ~$ c& _5 a6 c; \9 V0 T0 I
: w) ]: s5 |3 {! jMODULE_DESCRIPTION("Led platform driver");
" o2 ?$ Y0 s0 W! r ?: }- |1 g6 EMODULE_AUTHOR("Tronlong");# o) Y# r6 R& X7 h8 G- p- I$ W+ ]
MODULE_LICENSE("GPL");
( z: a" E4 Q1 W" b% s0 c* m9 [: _3 C) O4 D* L. q$ D6 x
|
|