|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- Q0 y6 J! Q$ D# } R
#include <linux/init.h>
$ Z6 a" I" E ]" ^# e6 r* R+ ^#include <linux/module.h>
6 _! g1 E/ [/ [2 ]#include <linux/kernel.h>5 g H2 X/ k4 E! `$ W
#include <linux/types.h>9 D# K- L1 E( ^% q* V# }
#include <linux/gpio.h>9 g h3 S& j h! a5 ]& F! t6 [
#include <linux/leds.h>; H/ x( c2 m. ~
#include <linux/platform_device.h>! M; m0 i! C) S Z4 E
" Y4 s O' W/ [
#include <asm/mach-types.h>
# R! _+ d3 u1 \4 i2 T+ ^. T#include <asm/mach/arch.h>
8 \. j/ N t$ Z" N# b#include <mach/da8xx.h>( U+ F. e. t( g) X6 `' V
#include <mach/mux.h>
5 _2 c: S0 z, T- K4 Y2 j8 Z# v# j- S0 _: p# T0 s! K
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 N6 W9 i% p L( Q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* n1 H! c9 \+ x+ U0 M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 Y& H, U% B% B, d# q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ j) G* n5 W1 w
1 G% l) E5 Q/ }, ~" T9 q* B/* assign the tl som board LED-GPIOs*/
$ L/ T1 J( d6 {- j# ustatic const short da850_evm_tl_user_led_pins[] = {
$ r8 I# w$ F1 x, M! Y" S7 J /* These pins are definition at <mach/mux.h> file */
( G ]2 Q( Q5 T1 F1 ~7 a: c DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, N: R9 i. _* q, S8 Q' w6 o -1. D& w7 C0 S( O8 k# M$ A4 o
};
0 z2 d6 }) b& T; ^! @' T" f6 M& ^( u1 b- ^8 T( ?* r
static struct gpio_led da850_evm_tl_leds[] = {1 n i) d9 K% `" H
{
0 M5 v. I5 f7 j- ] .active_low = 0,4 _( y7 B* j8 s1 p* A
.gpio = DA850_USER_LED0,! ]* ~- f. Q8 l, h( D! q/ Y
.name = "user_led0",
$ r7 ] s' W. K5 Q6 w3 m .default_trigger = "default-on",
. G. }+ d: d0 ]+ s },$ C6 e! r, e. ?8 Y. ^' L
{
5 E' D1 r$ N- U8 z8 I; q .active_low = 0,
: V3 D0 M: g' s- L3 \ .gpio = DA850_USER_LED1,! b4 V, M% N+ N
.name = "user_led1",
* q) m9 B& H; v! l! b) I$ z# ~ .default_trigger = "default-on"," m5 O4 N. M r
},( q/ V' v/ b6 }& g" d
{3 j& Q: G# d# V8 e* O
.active_low = 0,
2 j/ r! t+ P- U7 R4 m1 K .gpio = DA850_USER_LED2,; Z5 B- [4 j$ e. l4 Q
.name = "user_led2",
4 j+ }; a' S8 ~% Q! Z6 b .default_trigger = "default-on",: x/ z* G$ D, ]. q: C
},
; i, k3 S8 A- R1 }& _! O. }' L {4 v( J9 r6 l) I
.active_low = 0,
` S+ }" c% W7 |, u .gpio = DA850_USER_LED3,
- v8 @& o' z7 k: M, V# [1 p .name = "user_led3",6 M7 T/ q! Q) q0 r9 E# \
.default_trigger = "default-on",, ?! l, V+ S. a8 q- X/ j$ v
},
0 v2 P: ~6 x4 U9 _};
9 Q6 o$ E1 z0 `: z) b8 a3 [) A1 n3 I: w: T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- v" I' h% z' R. b9 U$ t
.leds = da850_evm_tl_leds,
% _- M- a/ w! I* g: }+ b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 Y9 h5 A- ~9 c/ _% p" A
};1 h( E& X- _0 W' w( \
8 |1 u$ h4 P+ r J6 `static void led_dev_release(struct device *dev)
6 E1 n. N6 q `5 k: W$ k{' D: k1 V3 _2 ]7 `3 Y; a8 Z
};# v$ c( X* S/ n
8 N4 ], \# Z& ]0 f( o9 Kstatic struct platform_device da850_evm_tl_leds_device = {
4 N A6 [! e% u& _ A .name = "leds-gpio",, B! ]) \% v: q F
.id = 1,0 n5 l8 J: ^. Y4 G7 a5 Z
.dev = {
9 C" `* Q+ ?! s" z U .platform_data = &da850_evm_tl_leds_pdata,- ~4 B( T1 G* Q/ |- I5 H, b
.release = led_dev_release, u2 w+ P- V; o$ I8 K( R; y# C
}
) X* G. T( d2 I- p0 f$ x};
5 x `* _/ s' S8 y7 j; r
9 ^( ?, h6 B3 y+ sstatic int __init led_platform_init(void)
' X4 F+ e/ J* o+ ]$ e, D, ~% v0 u8 U* Y{
+ m( o/ z2 Z3 M) b% Z1 O9 S j int ret;
, F2 `" I: ~. W: t0 b8 c& O% H#if 0
* s6 [4 z" I6 L ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- S8 H! |1 h' ?. `
if (ret)3 m: P; W% D$ R
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# t- G* r8 l& m; C "%d\n", ret);0 C7 G0 B ~( J4 g5 S5 |
#endif1 L8 O, ~" @1 @2 ?. ?
ret = platform_device_register(&da850_evm_tl_leds_device);3 Q" Y: b/ v2 F; L
if (ret) ^" X+ u" K: B* q9 ?7 _+ s( B
pr_warning("Could not register som GPIO expander LEDS");" `8 \: S+ P: {+ I
else" g7 z, W' @1 W7 S4 J U
printk(KERN_INFO "LED register sucessful!\n");9 A( u$ A6 c7 |0 Q
$ k9 q; c6 Z9 D2 o4 h
return ret;/ e( ]% ]/ R5 x
}5 K7 c7 n# k. r0 G4 @6 F. D
. v) p; r2 y) J) p/ i8 c
static void __exit led_platform_exit(void)
0 d8 L, @8 t! q) I. X{4 O0 Z% a0 C4 \5 c& S
platform_device_unregister(&da850_evm_tl_leds_device);: U; y' K# t$ i1 L+ R2 z
5 Y8 U) P9 n6 l) j9 [6 q# S1 u" x printk(KERN_INFO "LED unregister!\n");
5 Q4 e3 ~# a8 m1 y# N9 p}
9 w) W7 Q' O$ ]! \' B: L- H
7 S/ q9 ^9 d% e3 e9 amodule_init(led_platform_init);9 n8 @/ p+ ^9 I" A4 v, I' Q7 [: [
module_exit(led_platform_exit);/ v! j, q3 b: Z4 t- r5 j8 k6 T# H
# ^2 O; L# q$ O9 C! ~MODULE_DESCRIPTION("Led platform driver");/ A, ]9 [) k* f8 K3 i; c2 f+ {
MODULE_AUTHOR("Tronlong");) C' ~, H5 ~0 d9 h$ I
MODULE_LICENSE("GPL");# c. v3 T* K9 a4 [! i, C
% C3 E$ m2 L( q- x, T' ~$ x2 D7 Y |
|