|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" N' B) n5 d, \1 Z; n
#include <linux/init.h>
- k) a% d, _" X* Z) h& r1 b#include <linux/module.h>2 q! h9 p8 G) v# [
#include <linux/kernel.h>+ w) w* i; q- W% f4 k8 h! y
#include <linux/types.h>6 Y, m: O9 x/ C7 r) s
#include <linux/gpio.h>" B& m9 F( x- j* n* z
#include <linux/leds.h>
- r7 t9 W9 T K' e" [) G#include <linux/platform_device.h>
, y( w' ]' E0 Y3 W& D, p) w g. ]7 p( ]# I
#include <asm/mach-types.h>
- l: }: V( n$ U" J7 t5 Z#include <asm/mach/arch.h>. ]; g' V! u3 k, K- ?
#include <mach/da8xx.h>
( g. }! C2 X V3 O#include <mach/mux.h> X) X' ^' \% h) H1 b5 B
. p$ V; b4 a, u. z8 T# U, f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" z+ k) ]. o4 u& z8 ?7 ]7 b5 U w
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): _5 z0 Y3 A$ t. L$ |2 \0 y8 ?
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): O4 t* v4 F$ p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 S; u$ I: b8 |) z+ q
/ E) b8 i1 n& F1 F; }) ?" w! ?
/* assign the tl som board LED-GPIOs*/
) v/ U8 K4 w P$ c1 m0 S7 M! h7 estatic const short da850_evm_tl_user_led_pins[] = {
/ e8 b4 u C% ~! a /* These pins are definition at <mach/mux.h> file */
! k7 R0 d+ t1 _% c) l2 H1 L, c DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) m) X/ P( _9 z, `/ n -1
! `* t0 L- u. D- g& V};
1 {% O' |) v1 k, _1 X" j1 b" ~1 ~6 g% O6 ]0 z$ `
static struct gpio_led da850_evm_tl_leds[] = {, w4 Y, k' U& E' ?& }8 c
{
. F8 n+ F' D5 f- N0 N .active_low = 0,4 l9 P8 h3 N/ }- O7 w# |$ b. d
.gpio = DA850_USER_LED0,
. H- P9 x' `& K9 f9 S7 `# M; A .name = "user_led0",1 H& m, h- {9 c, e* d
.default_trigger = "default-on",, @5 W7 G t$ C" N
},
- n3 p: a( ]" n9 S {
& t# S8 b" M I" p d0 S, u! Z .active_low = 0,
6 v$ Z- F; Q% h; d W+ V { .gpio = DA850_USER_LED1,
: w" p9 G) E) l3 e" J; T .name = "user_led1",' N; i& @* ?7 y' X( @8 J8 w
.default_trigger = "default-on",6 ?: B a' g. T# r4 u
},
& f; M- n% a$ p' T) z {4 d7 V/ D! P7 d, Y! G. o+ M
.active_low = 0,
! X2 Y5 D' s# A .gpio = DA850_USER_LED2,3 d: e' f. q& v: ~% Z: u5 e
.name = "user_led2",$ b K: J% W. Q& `# V6 L
.default_trigger = "default-on",
* e* y% `/ `+ H8 V },8 }4 m, g1 V( M& M$ f
{
" X. ?7 I' m1 D7 y, u .active_low = 0,
3 M2 \+ m; H, L; P% } .gpio = DA850_USER_LED3,
( j, K( i) a# o/ O9 k) b1 E5 t d .name = "user_led3",
6 e- ^( y8 ?/ O0 C .default_trigger = "default-on",+ \- o' `9 L- p( z- N
},! z v2 Q0 K3 V& g( f0 ?$ s+ T
};
4 b5 j! x. J- L% y
8 \3 x5 E; ~0 j4 Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ n6 k( S4 {9 P
.leds = da850_evm_tl_leds,
% ?1 `: v! |' X7 }3 R, [ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% S5 E/ e( i" [( z0 [% i" n};$ L, \ U6 ?8 k5 z/ j
. C O: U5 U+ V* }# E A) Z
static void led_dev_release(struct device *dev)
. u- u" P7 _% ~ g{, f7 I6 {+ C& V, `1 A2 t I
};
. g4 ?+ X$ y) b; Y: u( m" g" R. z+ s5 b8 I ^3 E; f
static struct platform_device da850_evm_tl_leds_device = {; x+ c! [8 l" i- I- k6 \/ i" F
.name = "leds-gpio",
9 P, l# k* l" k. ~# s' S .id = 1,6 M2 e/ E/ X- N2 D/ A
.dev = {
& j$ q& S, Q3 \% q .platform_data = &da850_evm_tl_leds_pdata,8 Y- Q3 J* O) |5 ^ }
.release = led_dev_release,% ~+ p; {- r# O- d
}
: |5 u4 a* _ N7 C/ m& t- \% r# Z6 J};% k0 p- T/ O: u8 q% j
) F6 c# _5 F, e6 Q6 E$ z3 x
static int __init led_platform_init(void)3 s9 p+ C- L9 e4 b6 X4 O' ^- g3 H' w
{
) \( v- ]) }: V3 z* x- p int ret;
: N; U5 `7 _+ U) o* R8 x) T! c#if 09 h W- p, ]# B2 s8 x
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 Z* X+ S7 d3 ` }9 X" D9 C
if (ret)
' @2 \, h+ ]" F% b& V6 Z$ } pr_warning("da850_evm_tl_leds_init : User LED mux failed :" `' [& q* d: u$ m
"%d\n", ret);
1 T* z8 ^ x8 \2 m- a7 k5 R- G#endif
- D+ \# U: {. Y2 T2 X ret = platform_device_register(&da850_evm_tl_leds_device);8 p! g) p5 _9 `. ~) `: E
if (ret)
5 r" E" j0 z# _$ N* d" e+ N pr_warning("Could not register som GPIO expander LEDS");
p: u& [+ p- I4 a6 M else
H' s4 B1 x- U5 o% t+ G printk(KERN_INFO "LED register sucessful!\n");! ~" x; T3 J) ?8 f
, K* g# Z3 }# s' ~, I' j% y return ret;
2 f& ?, J7 \ f}
( F( ~+ y; z4 [/ u
9 W0 d+ v0 ~8 l2 q. l5 q+ Rstatic void __exit led_platform_exit(void)
3 B( |# C9 m+ W. S9 A, V9 n6 E{/ Y% R( U9 ~+ p: V/ O, T
platform_device_unregister(&da850_evm_tl_leds_device);- E! b! C$ Q8 j0 k, k( W
; j0 z+ [$ E3 U3 C
printk(KERN_INFO "LED unregister!\n");
5 L( P: ~' t( A, o- O) v/ [}3 v( d$ i. u0 c) h( B
! x$ u1 f* |" I+ V s& f$ L* T
module_init(led_platform_init);
5 {% f$ M9 n; N0 L) h* Qmodule_exit(led_platform_exit);# @% @3 \4 N+ |; j7 X
% H- z1 N/ U/ s; p
MODULE_DESCRIPTION("Led platform driver");7 T4 G6 o% r# m4 K9 G& @
MODULE_AUTHOR("Tronlong");
9 B5 d6 @! M' pMODULE_LICENSE("GPL");
6 t* r4 ^8 X, N# ^# I: \6 K& {4 V" L$ I0 t
|
|