|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 d0 r7 e9 f1 H% f5 A#include <linux/init.h>
& b, b- q% V4 N& _9 C- l7 W' }+ \#include <linux/module.h>4 R8 U! b5 t) k3 d" ]
#include <linux/kernel.h>7 z. J& l/ F+ j. ~2 R
#include <linux/types.h>
7 @6 f. V' i. y+ [, Z8 d#include <linux/gpio.h>
! X* V9 ~) D# O W1 j#include <linux/leds.h>
& F, ?3 i2 @3 q#include <linux/platform_device.h>( J' h, O8 S5 v- B
n+ }1 S6 k8 E0 x* a7 I" R#include <asm/mach-types.h>8 h! Y0 h( J, E, f. ^$ p1 J* ]
#include <asm/mach/arch.h>
6 H! a, G- ` A* R [# L$ S$ B9 Q#include <mach/da8xx.h>$ z" Z; i% _& R# t
#include <mach/mux.h>
+ c( c5 E( @1 V0 V7 q4 K: y F6 |& h0 |$ M7 u3 ~
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 [* P/ d. f! W# ~9 o#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 J# }% W/ q3 j& ?9 B0 \#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' `1 T- v" G- l: `/ j7 Q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 }0 |2 F; {* H! }+ Y
P' R" m, z! R/* assign the tl som board LED-GPIOs*/' \7 t: f2 K: Z" n1 ]# J! y
static const short da850_evm_tl_user_led_pins[] = {: I3 ]6 |( T8 p$ r& V; a4 L# p
/* These pins are definition at <mach/mux.h> file */
, M ?4 o) I- K) o4 y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 V4 I+ _5 W, X0 s# b -14 X: \2 `& H8 S
};4 e9 f6 ]( k3 a2 x7 H/ R @
! x4 ^2 P$ h# Wstatic struct gpio_led da850_evm_tl_leds[] = {
- L- y1 ?/ Y4 |% A {8 R. ~+ U# E+ }$ a. {3 z8 M) k
.active_low = 0,
+ G g- `* o! y5 s5 I .gpio = DA850_USER_LED0,
- O& u! y$ [# m4 f' ~+ }8 b .name = "user_led0",
$ W1 I! {3 }! k .default_trigger = "default-on",
. c6 z4 _ x8 ?) U1 p0 P" K },# P% G+ I9 x5 U; Y$ Q
{
% k) X( }' T2 D( E .active_low = 0,# m) x& ^( S- ~* F' t4 B
.gpio = DA850_USER_LED1,
. V( G8 B( D& l/ e4 K% [; t .name = "user_led1",, G D/ q' y, i: |) X% w
.default_trigger = "default-on",
6 X1 ]& N3 X( m- ^3 I },9 C0 F/ q( T' s
{
! T9 @' i' Y3 i' ?8 R0 c .active_low = 0,
2 x6 {2 f2 f; @3 ]0 ^ I .gpio = DA850_USER_LED2,+ H& G h' \. K' q
.name = "user_led2",+ [, F/ F) ? m; Q/ X' G
.default_trigger = "default-on",
8 v9 w5 U( C, S% |' ?/ n" v },
. p! E/ } g5 l2 E {
. u; w# t/ F& J( t. W- d: @ .active_low = 0,. i9 j: t6 Z" h" ^
.gpio = DA850_USER_LED3,6 T0 O/ W1 R! j
.name = "user_led3",
8 O" ]9 r" e+ M% s .default_trigger = "default-on",
W( G4 [ u) g" t },
$ _0 q! C/ y. H3 n& K1 a4 m};
q2 c. H2 l5 r$ Y9 I- Y) T
$ z0 U9 a: x7 u9 Gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' X+ f6 W0 v: C* j
.leds = da850_evm_tl_leds,5 H1 h A' w+ B# y2 j' b1 A1 x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" E# B, Y8 n7 O' q};
2 h2 u9 F6 B+ r. M+ U) H3 ^ _/ ^2 i& y* F) ~! l
static void led_dev_release(struct device *dev) b- p' h$ V! n3 C/ O
{
2 q7 S, R& s9 W};3 \) u! P, e X2 g. p0 G
}1 K8 ]6 S" ~8 H' l7 _3 m
static struct platform_device da850_evm_tl_leds_device = {, M+ t6 j6 _1 t$ R! q/ x
.name = "leds-gpio",
( N2 o: m% u' @" d; @ .id = 1,
3 d/ ]" y0 l7 {' y' g3 B9 c .dev = {- o2 K% k1 N& D/ U; V3 h; g
.platform_data = &da850_evm_tl_leds_pdata,2 ]$ L5 n2 }4 \) J5 K
.release = led_dev_release,
; W$ A. U' w9 J. B6 e, D+ m }% P# D! ^8 ]( s
};, ^! e7 W( y3 s
0 }+ e \0 c, b) {1 k: c& f' D/ `static int __init led_platform_init(void)
) |% e" z! r: ~: Z$ p* h; D{
# H& F$ I/ q$ {8 Q int ret;
9 X+ x" D( [6 B) g- T3 J& Q#if 0# _4 N4 ^# K9 j- }; ~3 w# ?. y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); M; w0 M: m6 z- w
if (ret)
- t2 t% L& y( F- L* O$ q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 [3 B5 u; m P; A
"%d\n", ret);
- j) B2 }$ N5 m, q2 z: T4 A#endif
) G; R9 |. b8 x7 E6 c- n ret = platform_device_register(&da850_evm_tl_leds_device);
; u6 y5 o8 ?, _3 d3 j8 A if (ret)
$ ?/ W( }! _2 C% [ pr_warning("Could not register som GPIO expander LEDS");
6 u/ G" n! S) c- l: W- b1 i W else
' B x8 E5 [; U: e) X u9 k! z printk(KERN_INFO "LED register sucessful!\n");
' I/ ]: w7 m4 I! D1 Y; i! o
3 D5 P& o4 B6 `7 ]9 W+ c- i/ \ return ret;
0 j; p* E& W+ I) M}
8 j" L" u3 D' E7 w9 c
! N# p, w* T8 l. q. ~6 z: `static void __exit led_platform_exit(void)
4 R3 U; p* z; P1 D" Z{, [8 q0 l5 d7 M" ^
platform_device_unregister(&da850_evm_tl_leds_device);# @( q9 d# Q8 }$ [+ G. {
* X) g* V) \- ^1 X
printk(KERN_INFO "LED unregister!\n");$ h9 L! o2 ^+ o, k1 j
}
( c4 n: ~( |9 d. r, k4 y+ C- I9 B0 f6 k
module_init(led_platform_init);# ^* s% ~- o8 j- B$ Q# \
module_exit(led_platform_exit);
% T; K6 U! F9 B- n- k* B- I0 q+ Z
MODULE_DESCRIPTION("Led platform driver");
8 H- v9 v/ ^& q1 D6 Y2 g7 uMODULE_AUTHOR("Tronlong");
# e- N+ Y6 {* b4 m$ g, a7 `% zMODULE_LICENSE("GPL");' a+ `7 w5 ?/ M4 D6 d3 ?
- o v* [7 m% [1 Y0 P |
|