|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- o1 J9 M2 m) p! I q7 j5 f6 i#include <linux/init.h>2 G2 i! q0 A% `: I7 a" l) }+ ^0 {
#include <linux/module.h>
9 m, Q* s) [) i* y2 G6 V#include <linux/kernel.h>$ ]! F) m8 I6 U. D
#include <linux/types.h>) r+ u% m+ {' f
#include <linux/gpio.h>
% L5 i ~# Q6 F#include <linux/leds.h>7 J9 I* V/ O% b( F" G) S7 {% l
#include <linux/platform_device.h>5 w( j# V% O$ ~4 ]
" U5 O7 Q7 `/ l7 D) U
#include <asm/mach-types.h>) ^, k) p7 v4 E9 H, E J8 Q, h
#include <asm/mach/arch.h>* ?4 A5 l+ {/ {+ h
#include <mach/da8xx.h>
6 J4 l; e9 a6 s4 `; s! a f#include <mach/mux.h>. z2 L! z u @, {
- O- x+ m! F- d1 ?9 \
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ l4 E/ Z5 K' i9 {6 Y8 q( ^#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! K& v B/ ^9 U4 a) x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ [' ^- n l7 D2 V/ M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): w. I( p# e9 u2 Y5 x; d5 r
7 {. z# p8 i; f6 p: e4 U% \
/* assign the tl som board LED-GPIOs*/0 s3 O, ^! L0 T0 p! y0 n4 K4 z4 K
static const short da850_evm_tl_user_led_pins[] = {6 U+ I- I7 U/ M/ g# e
/* These pins are definition at <mach/mux.h> file */
3 i! _7 H; E8 I# v) Q$ z) j DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 C! R, [$ r+ M. H
-11 D9 [, [ `, s$ Q/ j& m- E
};: Z0 X, W1 L5 @* T( f3 N; `2 R
4 w4 O$ i* O$ _. O h9 Dstatic struct gpio_led da850_evm_tl_leds[] = {0 Z6 X8 B4 @/ S; Q1 F' P1 e$ `
{
/ H1 d( O4 |$ f& B- e5 O* w' C9 N .active_low = 0,
" p: w, \; A2 K7 i# i3 y$ T0 w .gpio = DA850_USER_LED0,
8 |( N) _7 ~6 x( Y2 B* r @ .name = "user_led0",
: f$ k# O" `' ?" m9 _* F/ _ .default_trigger = "default-on",
' X& G: T- _- [ },9 ^, E! e h5 l$ L' K
{
6 e. I: D; [8 y+ S. d .active_low = 0,! E2 C# ?: _1 Y- G
.gpio = DA850_USER_LED1,
4 a/ X) N9 q) G# r' m. @# X# n+ R .name = "user_led1",
! o' V5 e( p# u. |# N9 r$ P .default_trigger = "default-on",
5 Z9 ?; M5 }. u( o0 i },1 J Y" b3 F& m* w% v
{ E# Y: s! z9 M' B; N/ {) }; y$ \, a) a% K
.active_low = 0,( g0 K; r. H4 P1 J7 q9 `) ?
.gpio = DA850_USER_LED2,
* D7 |0 R5 `8 A7 l3 Q( f .name = "user_led2",
% Z6 c' v! S' W .default_trigger = "default-on",7 |2 R/ y7 ^& b1 C, N' k5 H
},
% x7 k, M+ ?2 A0 y4 a {/ c- O0 R% i8 s; h7 _ F7 ]
.active_low = 0,
9 S5 ^) d& T N8 J! |3 z! `+ V- n .gpio = DA850_USER_LED3," d: e8 I5 q0 r, ]1 O8 L
.name = "user_led3",
' D, B; I6 q) J; E2 X1 F% W- Y4 `( X* | .default_trigger = "default-on",5 E% V5 v) A( k# }2 |! k5 D
},
( m$ H8 n; j# ]- S6 J: G1 Z2 j};
3 u* H1 ?5 z/ F* i5 @* m/ i
+ X4 s. Y7 h8 g+ @; mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ b% O& R: m( \7 J" @ .leds = da850_evm_tl_leds,
0 u! ?3 R0 m6 O8 {# M4 [ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 h$ F/ Z/ d$ U9 f5 O
};1 Q2 c: G1 s! L1 d
9 A {+ v/ [, D
static void led_dev_release(struct device *dev)5 _7 E: H/ Y2 M
{
`: D# U2 L; t, s5 E9 W5 l};- X. ?: v- d; W
# Z. T8 |% P' I% e% Astatic struct platform_device da850_evm_tl_leds_device = {8 M1 Y1 D) [% p; t' U# X! C) ?' e
.name = "leds-gpio", f9 H0 U- B9 s7 N+ R9 R0 W
.id = 1,
0 ~3 I% i) M+ _ .dev = {
0 A' g- y4 N9 J w1 n8 P! ~" M .platform_data = &da850_evm_tl_leds_pdata,
" i- u/ E2 S& a& M# T .release = led_dev_release,) R( O, Y) A2 K# p, a: u P
}
# n! S; b. q s' C& G; M# p};
' F5 t0 s7 @, I. P4 [5 d! R
, D- h7 c* A. N8 D3 T3 [' Astatic int __init led_platform_init(void)
7 i) B* E' ^. R( Q7 X" ]{
$ H4 v4 t& k9 o. g3 \2 H9 K+ O int ret;9 q# }/ [) O- O9 m8 n- F
#if 0, g* R. J. X0 x3 ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 A* n3 j5 ~% D0 D4 N; e5 B if (ret)# q3 q0 s( R, W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 @$ |: N( O( c' r$ [9 O1 a
"%d\n", ret);
+ F6 P, L5 H/ d' l#endif9 j' ^0 x, v" x% A7 S
ret = platform_device_register(&da850_evm_tl_leds_device);& P+ s5 a' P. p/ L( b
if (ret)
! @& _: c K2 A# m( s6 T) |9 ?8 k pr_warning("Could not register som GPIO expander LEDS");. a- V1 N: R9 ?4 e# e# b) U. ~9 y
else
2 _0 v: ^" w) H; `, n! G5 K printk(KERN_INFO "LED register sucessful!\n");, x9 w# N2 K3 r2 z
3 r1 h$ A4 h" Q8 @( o8 T9 ?$ h return ret;
2 F0 p5 @9 u3 J% m/ l}7 L% a. F' v# _! q
* Q) M9 F* X' S. g0 |
static void __exit led_platform_exit(void)
( q4 ~. g3 {6 _' J) P8 `% ]{
" h7 \% D" j0 a platform_device_unregister(&da850_evm_tl_leds_device);
5 F4 G1 O) v' c1 ~ u. G
9 ]6 B N- i0 P x& o$ {* a# ` printk(KERN_INFO "LED unregister!\n");$ Y' X9 t: c6 Z1 m9 U% h
}
) B* M1 G) v" ^3 [8 s1 q/ Y6 G7 p7 L# L
module_init(led_platform_init);6 S8 y8 [! ?5 S# d3 y
module_exit(led_platform_exit);& |! R; ~& m' M+ [8 F% ?1 y- o/ `
$ s6 N1 Y5 m2 x/ }$ W
MODULE_DESCRIPTION("Led platform driver");
6 }( q; y: s: HMODULE_AUTHOR("Tronlong");) d" a& a% \1 H1 u. @
MODULE_LICENSE("GPL");
9 {5 s" S7 l1 l! m
) H. v7 w7 T- C+ |7 `+ C |
|