|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) y( m# {# F+ Q- u% Q% s; o v. |#include <linux/init.h>% k) N0 h y9 ~, Z0 i6 p( z
#include <linux/module.h>
+ I2 ^0 G" {2 v# _* l& v#include <linux/kernel.h>6 r$ J5 w- L! \0 j5 O1 o
#include <linux/types.h>" Z) V B( [4 @. Y: y: Z: Z
#include <linux/gpio.h>
% n1 `+ I2 a+ K" S7 \" J1 h- F: m#include <linux/leds.h>
1 y9 e; F. Y1 n; m* A7 w#include <linux/platform_device.h>- P4 Z& R x6 r: U- m9 u
( z3 E4 D6 `# v, W#include <asm/mach-types.h>1 K% e* a" z8 Q1 h
#include <asm/mach/arch.h>
. T9 G% c) @; F* o#include <mach/da8xx.h>
) c* `" }4 W* h- _+ Z#include <mach/mux.h>
' ^/ T% i i: m# u4 g7 s. @1 Z8 \, r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 U, w8 C5 t) a& v8 ^#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). P$ i& y5 q. r- [$ J* |, J6 C
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* ]+ s0 k# b0 F1 w: B% J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; D n* K& O4 ~: }5 d
* E+ x: a1 L/ e* _/ C% S# z/* assign the tl som board LED-GPIOs*/
6 |$ z+ p/ a8 P* i5 Estatic const short da850_evm_tl_user_led_pins[] = {# L* `- i: r7 i
/* These pins are definition at <mach/mux.h> file */
' f# q& M0 \7 u3 p. e) V DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. U8 {' M+ S" [- H -1
) I. Z5 @1 @0 L2 u};
, K/ Z. v- \* d4 [9 p% h6 a) P3 t. W8 U
static struct gpio_led da850_evm_tl_leds[] = {
- H1 o$ j1 \4 P" j8 M( T {
, Q! ~8 F; j- M# L, l; K .active_low = 0,1 `8 I1 S* g* S1 c5 S v
.gpio = DA850_USER_LED0,
* O6 f% g# ]4 {3 S+ E [+ Z .name = "user_led0",( c% x" H7 w) N* Y4 y; v
.default_trigger = "default-on",4 ?6 p5 f) G! j$ l4 @
},! U/ @( c* h& N7 ^0 r
{/ V* c- D2 X0 ?2 c
.active_low = 0,
$ P6 S; n ?/ G4 g .gpio = DA850_USER_LED1,
* _/ m2 S0 J+ G, W8 o, k .name = "user_led1",
/ q- B4 N) O$ U* I" Y+ m) d, Z .default_trigger = "default-on",+ O% M2 t2 p9 x3 C k' Y7 x1 m
},
1 x. u6 o+ o& I8 ^8 f; @: j8 G {6 f! z3 D1 k. S) j% K4 t
.active_low = 0,
& s& k) q" U. i) u .gpio = DA850_USER_LED2,
" C K6 k5 H C6 [4 b$ u( V1 E3 ? .name = "user_led2",
6 j5 D1 C2 S0 ?9 p# E! _8 E5 h$ g .default_trigger = "default-on",
5 i) a: t$ s; S& d5 ? },0 [% t) y: z6 g3 @- X
{
4 s$ r+ `' d m. k .active_low = 0,4 I; y$ g* ~/ i9 n
.gpio = DA850_USER_LED3, P4 e3 ^5 I* j+ j1 W, ^
.name = "user_led3",
4 G8 H4 J+ u D l! C; V .default_trigger = "default-on",
; \) o7 y# }/ d& Y m },2 H7 Q4 G7 u6 r z7 m
};1 i6 d3 o/ n3 X) j# C
, f' }+ n$ r3 H0 L. S. E+ |4 E0 z& {
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( |5 t% u- q/ H4 e4 o+ l4 J
.leds = da850_evm_tl_leds,2 L6 V; L6 d2 C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' y( H5 l! l% G};
* q# k! U. z: N7 X N+ v' d/ i6 }2 `. l/ Q1 @* y
static void led_dev_release(struct device *dev)
& N5 e/ y% y u5 W# Z2 w{
& h* ]! `, A( O& v* I: z};. D6 M# c, M$ `$ R0 ~4 r
/ j& K6 Z" v( V0 U' }# [
static struct platform_device da850_evm_tl_leds_device = {1 z0 I: T2 Z2 i
.name = "leds-gpio",
& d# h7 O: r0 A3 u( \7 A9 ]- Q. [ .id = 1,$ e+ |+ P$ M' c; [+ _7 x( ?4 ?( g2 _
.dev = {
2 v" c# y6 Q/ K J .platform_data = &da850_evm_tl_leds_pdata,9 ^3 B& C- m. E6 j; X4 `2 d& m" X
.release = led_dev_release," I S8 W/ P E9 A, H& A& g$ h$ G" G
}
, G( L6 j/ B2 m( R3 U: b};4 g- c; K' |6 v5 S) }: s
9 m( D5 K3 d2 \$ b4 F" g8 f* I4 Z' Gstatic int __init led_platform_init(void)1 j9 u+ Z% i- j. p4 ?$ X' k% k
{
4 s% L9 A& Z1 Y2 Z# x int ret;
( ^9 |5 ]* Z& N( o5 R6 D#if 0; k, p6 q# X h1 P5 D
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 ]( E5 ]; v3 q$ T5 I: D8 a
if (ret)9 i+ t: G7 Y+ I5 F- N- R1 u/ i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" G: z1 ?& {% {# M; _
"%d\n", ret);# J# q4 ~6 {9 D6 a3 W3 |
#endif B( j. O; Y6 ^9 p V& G- r8 z
ret = platform_device_register(&da850_evm_tl_leds_device);+ z6 \2 G) _ x" j* }" @
if (ret)
) r* h0 [! P5 q6 m' A pr_warning("Could not register som GPIO expander LEDS");. u) R" w) p# M; e+ g6 p
else# E8 y7 w, x- `8 M$ m
printk(KERN_INFO "LED register sucessful!\n");
3 Q7 ~' C u8 r: h1 @2 T" C# V, U. F* n k( M! a
return ret;: }( ~5 s. H, g" V* ~) }
}6 [0 v2 f3 M) a2 M" E2 m
. R0 K) n5 G/ Ustatic void __exit led_platform_exit(void)$ d4 x. c% S1 z+ H9 Z# H; j
{
# `, ?7 {1 O0 \! B9 K; e O platform_device_unregister(&da850_evm_tl_leds_device);
! o" m* R$ f2 m3 t% \+ i( h5 f0 F" f) M2 u9 W7 H1 U! R- Q
printk(KERN_INFO "LED unregister!\n");
2 r& y; p" V' s7 h! y}
% V, }1 o3 D/ }
! V: ?0 J3 S# P% gmodule_init(led_platform_init);
$ X: b7 y6 `: ]module_exit(led_platform_exit);8 c" M k: j6 y% y7 [! C
' x% _- B. j2 @+ U2 g, w
MODULE_DESCRIPTION("Led platform driver");
( l$ I* S+ {4 u8 u k+ BMODULE_AUTHOR("Tronlong");" |& N" ^$ n/ c7 _: K- s* f
MODULE_LICENSE("GPL");' }$ {8 V) N+ O) s( B* \) z) C+ S- y
( b; u, T& L% P) D3 M$ } |
|