|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) J- C1 N; t2 `7 c% f5 n$ M6 }#include <linux/init.h>0 j" D; a4 ]3 l) x6 |: z$ w
#include <linux/module.h>4 Z+ O* d$ A$ J# ?0 z! ]
#include <linux/kernel.h>
- a* X4 X; b: I) t' @% k0 D#include <linux/types.h>
- N5 k& M. |( w- o8 H9 O#include <linux/gpio.h>8 W9 F7 ]% j w" s% O" d
#include <linux/leds.h># ~' }. d1 Y& C2 R8 B
#include <linux/platform_device.h>) {8 D# e6 Y* v* `7 k( U. P& w7 b
3 r* W& `9 H; v" `, V#include <asm/mach-types.h>
/ n O7 y1 M/ v7 b2 M! U#include <asm/mach/arch.h>
1 j4 g3 u2 N1 f1 w4 S6 Y8 Q W- K#include <mach/da8xx.h>$ g0 k, ~$ }9 G5 n7 ~
#include <mach/mux.h>
: H+ W; A' J; U
/ `; d9 F! `, c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ d! g4 ?* M( p. D$ {
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: d" n/ a' x0 q* Q/ ?8 A3 j#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 ^! N+ P9 _6 X$ z) n+ x
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( ?9 L+ i: U" I4 c: V1 w: e. }
8 F8 W! `/ m/ i; C
/* assign the tl som board LED-GPIOs*/7 P7 C' _4 M, y; W2 Y' p
static const short da850_evm_tl_user_led_pins[] = {
; [0 D7 l7 M- p8 X: D5 ] /* These pins are definition at <mach/mux.h> file */
$ x: Q6 z# c6 H. z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 ^. J2 Y$ y/ X
-1" b8 Y; Z8 q4 M8 o! y
};( r x: o" V" U" B+ V
! u! `1 {- s+ f0 j9 _. U5 l* m% r( @$ hstatic struct gpio_led da850_evm_tl_leds[] = {( ?! s$ x" u& o/ n! T, r4 d
{
; H% W$ `; e: N1 j .active_low = 0,8 [4 ]4 |2 d, e# f( k7 d5 d
.gpio = DA850_USER_LED0,
0 Z: Q( o& O5 L% l6 h5 S .name = "user_led0",
- u6 B$ x( b5 x .default_trigger = "default-on",# d% M, J1 l$ b5 `
},$ M& L. A9 a8 o: l
{
' Y/ y9 P/ w; g. D, c5 y .active_low = 0,4 j' Q( G3 @& t# j- Y A9 G
.gpio = DA850_USER_LED1,( `* y. w9 j! U
.name = "user_led1",4 A6 s* [( h2 n) D) B* ]/ @
.default_trigger = "default-on",
0 j* v% x9 L& y4 i },
- V$ x4 N! \- O. ^ {0 b8 t5 Q& f% |' W
.active_low = 0,
2 W# G2 w; Z$ t7 n4 S5 F$ Y1 _ .gpio = DA850_USER_LED2,
" t7 c* n n6 Z2 d: ]# ~3 U .name = "user_led2",
4 b; N F5 s5 u2 I .default_trigger = "default-on",
- i% U+ U; [9 w },/ I$ S6 Y& f7 w0 V6 d6 g4 R
{
+ |: k6 m$ j' R( M+ i8 o! c .active_low = 0,
( l) p' u# J, X- c7 G( c .gpio = DA850_USER_LED3,
" F6 g8 M* K1 ]' q7 F r9 T" ^9 S .name = "user_led3",
4 [8 k6 v5 M- _- l4 N .default_trigger = "default-on",
( F5 S5 p, f* g- A W) E },# m( b- a$ _7 q; ?
};( T9 Y0 g' ` J
+ D5 ]7 b0 Z+ Z9 U5 Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 O' p" B! i2 U% d1 _; Q
.leds = da850_evm_tl_leds,
9 p. L. o% ~3 S& v7 F3 A, ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; K3 R. ?2 C1 b/ P
};
+ L: M0 Y: W Z. F% T6 j5 x4 P6 Z- }+ L8 V+ \. m, l
static void led_dev_release(struct device *dev)
9 M. v8 W/ j1 |2 S{
7 p/ Q) u# p7 a) {: f};
- ?; P/ _* G" m" c2 l( b8 R
' c: f6 c( C6 @& Z# B: g0 Astatic struct platform_device da850_evm_tl_leds_device = {
1 ~. K) \2 ^4 Z2 h2 u& _ .name = "leds-gpio",
& _' c2 Q( a; D# g4 B0 O+ b0 Z .id = 1,
6 H% q( Q. y+ L .dev = {
' `, p' [2 B; H .platform_data = &da850_evm_tl_leds_pdata,. _, y' ]! b$ g2 D; O
.release = led_dev_release,
9 M2 g' N: n5 E }1 \7 i' l9 H* h* Y$ T1 |
};
* r2 A( z& [8 ~- g
+ m. b6 R; o I; S" lstatic int __init led_platform_init(void)9 `/ o; z$ {; t4 m% o
{
. e- i% ]2 P' T; Q% Z4 ^ int ret;! P* b/ R, ^: I) q
#if 05 D; o5 w! c* Z* P/ ^3 }! J2 A4 `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 O2 S# U8 ~1 M- ?/ y
if (ret) [1 I! l3 {/ G
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 _& W' F. T5 ~. J# `; ~
"%d\n", ret);; S3 w/ B% _0 q }7 B% [
#endif& O0 c' L! N. E4 X
ret = platform_device_register(&da850_evm_tl_leds_device);
2 y+ u9 r: |: _1 L5 z2 X( u if (ret)* h {; N: ^7 m7 v j4 P
pr_warning("Could not register som GPIO expander LEDS");, N3 X- d4 P! x( k5 n. U: K
else/ |2 p. B' ]/ J, [6 X. Q
printk(KERN_INFO "LED register sucessful!\n");& Q, i& q1 z+ F; \
+ J; |) I7 D3 [2 }+ K R return ret;
% v8 A/ I. t+ \6 s" {" v}3 y# M' L7 \+ }0 Q" @
6 @* n3 B- p3 W1 Y3 [) q1 ~
static void __exit led_platform_exit(void)
, E9 @5 y _% g, g# `: a{) [/ w& p% _! j. ^& T
platform_device_unregister(&da850_evm_tl_leds_device);$ W9 M6 d8 z2 P3 G. {# ~# O
^ D; u8 D* m+ Y printk(KERN_INFO "LED unregister!\n");
5 N: S% n" [% T2 u0 T& W% ~9 ^% {1 k}
9 m) k' H1 S% ^6 O0 K
; O( E, f, r7 h0 S) \ g2 B5 r' cmodule_init(led_platform_init);$ f5 p0 L& f7 T8 v' @4 l( A1 G# D
module_exit(led_platform_exit);
$ w$ d" P; l" |. o8 f: T2 e4 v7 X8 |' G2 m5 M1 @
MODULE_DESCRIPTION("Led platform driver");
0 @/ }# f0 Y/ i! dMODULE_AUTHOR("Tronlong");" P0 Q% T9 X$ ]9 D5 W- U( s
MODULE_LICENSE("GPL");* ?& O1 I% ?: S
/ C* F8 b0 B, V0 h0 d
|
|