|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( y4 v5 w9 U6 Z& ]( m& i+ f
#include <linux/init.h>! q! }; I( C, T9 r( O
#include <linux/module.h>6 v& m8 e8 H5 V9 {9 F9 b1 d
#include <linux/kernel.h>
. b% ^6 R I& e" b( P#include <linux/types.h>
+ {0 H1 j2 ~( b" F9 B0 d#include <linux/gpio.h>, M) a V1 ]7 v, V
#include <linux/leds.h>
& h/ x" C2 m/ Q: n+ W5 E#include <linux/platform_device.h>
5 w. B% X( u) C, a: v- Z6 o0 ?4 B) s0 j( l3 \) {6 ]" M w
#include <asm/mach-types.h>. c- R( ` s m
#include <asm/mach/arch.h>
i9 |. {! ~2 t: G& s z9 t- y#include <mach/da8xx.h>
: v/ w6 ~! `1 q, G C#include <mach/mux.h>' K D- P) t& }) J& x1 [
: u7 T. s: P- x#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 [. w, k7 q/ X, w: z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 ~* n' ~4 G$ g/ u#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 ?, d8 t) V7 j' b' ~, W) c#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: t- [6 r5 E7 A) L5 q B3 h1 }4 _% N8 G7 t! a- t% q
/* assign the tl som board LED-GPIOs*/
" z0 T7 A8 \7 N; f \3 W1 e, Tstatic const short da850_evm_tl_user_led_pins[] = {$ j4 I I. |6 g6 @
/* These pins are definition at <mach/mux.h> file */
' i W: ^( v% [7 j( p! H$ d2 q. ~& { DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( X' u* t) y& I& M3 c -1
# J( ~0 z3 r* b" G5 \& {- I( ]& H};
, q7 n% }7 P/ f" a
; Z1 f4 h P+ v$ H0 Xstatic struct gpio_led da850_evm_tl_leds[] = {1 k/ T- L( `' a [" u" o
{
5 y- b8 u, [# c4 Z# B% |- K% [ h r, ? .active_low = 0,, l% p. l# H3 Z! `- H+ S& Q
.gpio = DA850_USER_LED0,8 z2 P% x& k4 A; p. o6 I
.name = "user_led0",
/ z, g$ b* h# D! [0 Y. P% s .default_trigger = "default-on",
: Q4 Y; \: P. J3 d2 I# J },
+ A. L" N7 X+ {8 |3 e( p {4 S/ _5 [1 I) }( P$ ]
.active_low = 0,3 {0 ~2 A A7 ]) c t
.gpio = DA850_USER_LED1,
. J' u5 C- ]. q1 g+ p0 ^ .name = "user_led1",9 Y8 K$ Z8 w# [* k+ s3 Z
.default_trigger = "default-on",8 R5 ]: e1 L' K; M2 V
},; S7 A0 v& u3 m& O g
{2 {- ?8 A, Z; c' u( I' Z+ m+ v9 ]1 F
.active_low = 0,
; F/ v- M6 S5 s2 t/ x u( M .gpio = DA850_USER_LED2,! C- ~8 R6 L# z& s0 } l# @
.name = "user_led2",
5 K5 e# A4 t* v! Y3 `+ s& ` .default_trigger = "default-on",
' Q, {1 y* q% } },8 U/ |6 n7 M8 I' A: m* k
{
6 |2 @+ E' e8 L) Z .active_low = 0,$ M9 L) O9 u( w& l6 ]7 U) f
.gpio = DA850_USER_LED3,+ Z" Z8 G6 g$ b1 P; m0 W
.name = "user_led3", v; b4 x! F1 C9 L' w
.default_trigger = "default-on",
y' u/ i9 i+ T5 b p },. f* d3 D4 a% Y2 G3 I
};
5 [. y. _. r5 M- k+ ^4 ~6 g3 u% @5 u* Q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! e8 B* F4 |* @% U. a/ ` .leds = da850_evm_tl_leds,, ]& A3 U) c" H( P1 k: `& h$ ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 ~4 I5 P" G; l! A; v3 \, E};
$ K# W% b0 ~# b2 C2 d( ]9 O& V3 Q$ h( s: i) |
static void led_dev_release(struct device *dev)
1 z. E6 d. ]1 }! b{
. `$ j) Y7 `# r& l1 P) o8 N9 `+ {& Y- b};
: S7 G% L- D- W# U/ P9 D2 M, o8 W0 k+ G# v3 q6 E0 r
static struct platform_device da850_evm_tl_leds_device = {
/ M; b3 m- ?3 D, I1 i* T) l .name = "leds-gpio",& G. t6 N; t9 \) \+ ? \' d# B
.id = 1,
: A- {3 s4 G8 Y( `& _ .dev = {; l; H, @( k, v1 U3 Q4 u
.platform_data = &da850_evm_tl_leds_pdata,! p0 G) S; a. \6 C; X0 P- x; w
.release = led_dev_release,: J1 G: i7 n X5 d
}/ q" n1 J/ z2 j. |
};9 r+ k8 v( n9 Z1 ]* n
! r4 R4 T$ @# H
static int __init led_platform_init(void)
?+ P( f7 F. F' ~; N{0 k8 k, s0 A0 i7 z# f; C A
int ret;
6 N: |, _' s9 _$ P* A7 {. _9 p#if 02 W) j9 ^6 c, D) C$ g' L# D4 V
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 L: j+ i W+ T( P3 V; A& u
if (ret)
. {: u) g6 O7 D" F1 k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ g2 O. V: d; U: R2 l" f- y "%d\n", ret);( `2 {/ B8 g3 ^( a
#endif( p u1 E( d8 T7 x1 U: a, I
ret = platform_device_register(&da850_evm_tl_leds_device);
: s1 x, |! y7 A/ S7 V9 T# O if (ret)) \6 I4 [) ~/ p1 \( ?
pr_warning("Could not register som GPIO expander LEDS");# b4 R$ r8 A- o7 x
else
3 h: P& x; F% A/ M$ B3 \ printk(KERN_INFO "LED register sucessful!\n");3 d. v$ Z4 h1 M. Y) t8 ?* A% W& D
' Y, m4 h% x/ c( g1 k3 E+ `7 M* ~ return ret;
- M9 M- P7 O9 \* m. Z}1 ^# u+ ]: v+ w
/ b% l0 }: O% E, c
static void __exit led_platform_exit(void)- p* P5 `2 R( X
{
5 Q" e: O" a w3 M( _! T platform_device_unregister(&da850_evm_tl_leds_device);4 `$ ]% w: D) g3 q5 _# H
7 r" v( m- L% g# ]/ B
printk(KERN_INFO "LED unregister!\n");+ k8 {' A" Y! ?: d( U8 W$ D* X( E
}% G: N( |" I. ^* X3 P
9 `* I! t h2 ~7 r: Z0 C* A7 rmodule_init(led_platform_init);
. A+ W2 p( e( j0 F3 J* Z4 g0 Bmodule_exit(led_platform_exit);+ k8 @; Z+ [4 f9 Z9 O p( F
U7 {' N* N3 r DMODULE_DESCRIPTION("Led platform driver");$ t& L/ A2 z- j0 C
MODULE_AUTHOR("Tronlong");
5 s2 l! |; H/ d3 H+ D' Z7 q* y0 f# x( ?MODULE_LICENSE("GPL");, K- n6 Q# K0 a
: J9 h9 o1 F# B$ W9 G% O |
|