|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 \9 |& o1 d, I" Q$ G6 {$ G
#include <linux/init.h>: p5 ^( U4 W1 h$ g. @& g0 ?
#include <linux/module.h> z! w- z" Y% O& r6 Z5 z
#include <linux/kernel.h>
- h1 [2 l- w/ A; Q/ @$ U#include <linux/types.h>' j ?5 S, V3 Q5 A. k8 X
#include <linux/gpio.h>3 p1 \* `9 a5 ~8 K: B! m
#include <linux/leds.h>
3 Y2 { ?7 O+ D5 {- M#include <linux/platform_device.h>- C* @; `% n- W! |
4 T% @) n1 G" w4 l# M2 R' A#include <asm/mach-types.h>! ^# T- c" m* F$ U+ `
#include <asm/mach/arch.h>
% \8 c3 A% K( Y) j- J#include <mach/da8xx.h>
( D2 J' d% S$ w& o# { |4 {#include <mach/mux.h>
6 w" ?* `7 T+ o V3 l, I V- Q* |/ h7 X) G7 A6 H* u2 S. b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; ? L- X; r! `2 l# L" E$ Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ u k: A# \) M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' h& ?, U5 S8 q+ v! N
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 K3 B" l$ j! P
, f+ T, _7 k: Y/* assign the tl som board LED-GPIOs*/, a' l$ ~" L. G* F8 T- w3 v/ V6 y5 L9 t
static const short da850_evm_tl_user_led_pins[] = {
8 P3 m- u E) t /* These pins are definition at <mach/mux.h> file *// p" h3 @% K1 B0 _# {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" m: U. S, Y- j9 I% X" | -18 |* G% O; S( d9 Y b
};
& g- Y' D( ~; ~! u2 p+ x
( u( y; R& R7 w- `3 cstatic struct gpio_led da850_evm_tl_leds[] = {
/ @5 I6 k0 j8 v4 i; Z a k2 P {/ X6 s2 m, Z4 \ a h
.active_low = 0,0 C9 G9 N$ f9 i
.gpio = DA850_USER_LED0,
/ t) s- g7 A# K3 m+ h .name = "user_led0",
$ i- ^# j( C- ? .default_trigger = "default-on",( h+ s3 v# k1 G C
},
$ O- M$ ]9 M/ L) t {4 F" v4 }0 x6 p* ]" _% x7 Z
.active_low = 0,
4 _9 v0 p. M7 I .gpio = DA850_USER_LED1,2 Y& ]1 D0 L$ X- D/ ?, m2 B' w
.name = "user_led1",
: u) w8 l: B7 A( \" X( L .default_trigger = "default-on",
7 B* _$ t1 g# `3 C- F; \/ i8 } },
! Z: q5 T% c: z, Q1 m) x {
: }# E) H5 O; X1 A! B0 c .active_low = 0,' Y1 E" a" B8 k$ T& Q
.gpio = DA850_USER_LED2,
5 P J* n. n% h$ L/ T .name = "user_led2",
0 ]+ m1 z; C% ? .default_trigger = "default-on",
, C( L: v ^- d7 F( E! c },
7 a7 W% W6 h- Z {
" J, c( I6 g: {/ c( {# n* v .active_low = 0,
& h3 F/ H6 ?% g, `- o .gpio = DA850_USER_LED3,
6 w% j7 K: ~. x+ i/ V( F3 S+ d .name = "user_led3",. ~9 j8 Z+ I I4 S) b# H
.default_trigger = "default-on",* y5 }3 j! {" u
},9 A G' k, o. u n# H* y
};
7 M( x6 h9 R- H) ~' M# C% L+ ~1 u B ^* R8 l! {- o
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( D9 B, A6 M% N2 k8 O" f3 ~- u$ { .leds = da850_evm_tl_leds,9 h5 A w1 N. c3 q( h2 g s
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),* B/ X6 {% n5 v4 x) w- \/ s4 o3 e
};
) k$ m, w' {2 T l% r, x8 d% {' r! y3 V
static void led_dev_release(struct device *dev)
9 P7 p; Z- `6 T$ W, q{& q1 I, c P5 D: q
};- f2 ~2 y. j3 t3 h- C
, u9 N/ K* k. s7 h+ {static struct platform_device da850_evm_tl_leds_device = {7 i9 K1 }# z0 G; T4 p
.name = "leds-gpio",) ]+ J' ]5 v% z+ [- z# R- W
.id = 1,5 R% B& I+ B( Z/ H9 d
.dev = {$ x7 X) ^$ T/ F3 k8 O. ]" U
.platform_data = &da850_evm_tl_leds_pdata,
3 p4 |7 o9 S* V0 r3 z .release = led_dev_release,
/ L: c( l8 R+ j }
( R7 G! m2 m3 R7 x9 `6 E. A};
+ g7 K) T! y! x: A
9 J6 W: n) ^8 L7 K% K8 wstatic int __init led_platform_init(void)
/ P7 V4 q, l7 g! H* |{
^* j3 r: e; V' f Q3 k K int ret;
2 K7 h- q& ?4 {4 N! N#if 05 H" B4 D- G1 N% @2 a: m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! M+ T, U Q7 @( [8 B/ t
if (ret)
, l" z* M9 a: S' ?, _1 _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 N( p3 i7 C T' Y4 b "%d\n", ret);
6 X# d( _) _7 J, }2 ]- _- D8 T! U#endif
: a" d- n* Y2 e; }! U7 q& w* y ret = platform_device_register(&da850_evm_tl_leds_device);% `: [: I/ x' N
if (ret)
& o) e% V; d& ~ pr_warning("Could not register som GPIO expander LEDS");
5 y$ d0 v) o4 |* ] else8 {6 R# T$ Z4 Y" H6 K; z
printk(KERN_INFO "LED register sucessful!\n");$ v) f1 q" ^1 V! v! w3 N4 h
1 u4 u: D9 g4 ?9 ^# k1 S return ret;" M/ p p- M3 Y7 `
}
/ j, o, J5 x2 C3 I
/ e- K) G* @7 H8 i* G6 b5 \. A( j- dstatic void __exit led_platform_exit(void)9 ~$ }5 V( C( k( Y7 D) C
{
( m: h9 U/ F5 [" U platform_device_unregister(&da850_evm_tl_leds_device);: U6 {: P; x( o1 f5 W* o0 R
2 H. `. d. a4 l( G1 d( I
printk(KERN_INFO "LED unregister!\n");
: B5 J& E( D L4 |! V" g: l& H. Q+ p}( b+ N0 h! g* `* r
# @. w5 p, p9 K( F' \7 Amodule_init(led_platform_init);+ e$ B; w" M7 g9 q" I
module_exit(led_platform_exit);+ G2 Y7 ^ {7 D# Z
' r% j1 Z* I7 {' _! UMODULE_DESCRIPTION("Led platform driver");
" h5 ^0 r; T7 y2 h# K* D. D- O) HMODULE_AUTHOR("Tronlong");
( E" T& P5 i: Z/ {0 `% ]0 jMODULE_LICENSE("GPL");/ ~" J% Y# s! P, Y3 h
! h v- p+ W2 O' F; o s( b- B
|
|