|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 H. s4 ^. ]9 S* o, W- u#include <linux/init.h>. r- c/ S) w$ `8 H
#include <linux/module.h>
0 m6 Q. J$ _4 Q8 a# k7 ` R% t#include <linux/kernel.h>
: w P6 D, R/ h4 m; r/ j: h* H2 M#include <linux/types.h>* \7 N- z5 d" i' B
#include <linux/gpio.h>+ i5 x' q* g" p, m0 { [
#include <linux/leds.h>& @2 Z1 u: n& _6 f. ]& L: c/ L4 I
#include <linux/platform_device.h>
- Y# w2 n9 d: A' E& T0 H, K" X( F8 h* J( v) J
#include <asm/mach-types.h>
0 \& h/ c7 U0 N6 _- }#include <asm/mach/arch.h>( U! H3 u. o( T8 T% X
#include <mach/da8xx.h>) \3 w: w \0 C
#include <mach/mux.h>: c; s: F5 J: Q8 ~
7 `+ t/ V1 O a#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 J- O# r* H! J; \$ p: \- i
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! h6 N! W9 {# D
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& T6 l, c) N4 p! @+ d4 D+ ~#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 D+ P" z- C# K2 k) Z& _; f
, a+ y' j6 R* K5 @- \0 x
/* assign the tl som board LED-GPIOs*/
, [* F2 t k t4 w0 H# R1 u# Bstatic const short da850_evm_tl_user_led_pins[] = {* m- e$ B' \1 \
/* These pins are definition at <mach/mux.h> file */
0 D% b# ~* K, x7 }+ p$ ] DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( [& V8 D6 G9 N* u9 {( L -1
9 p* N3 S6 n2 M};) P/ w' ~. X6 L( `. Y! g
2 j7 E6 j% u7 c; B
static struct gpio_led da850_evm_tl_leds[] = {7 t5 k t5 z4 F
{
1 w6 t' v, k& _* E4 @- s& { .active_low = 0,; e3 `9 x9 T) y9 p8 M: ?; \
.gpio = DA850_USER_LED0,
! l$ e- x7 ]! [4 G! ^/ P/ H. A .name = "user_led0",
5 c/ t+ r- R8 K .default_trigger = "default-on",) h! m9 H: p( S# k
},
, d( U- n% @3 C* R: ` {' J& ~. r( `2 \& k9 L
.active_low = 0,5 k* ~' f, y1 |
.gpio = DA850_USER_LED1,
/ J3 Z! F& w0 ~9 P .name = "user_led1",
* o2 H' S y9 C8 t! V& c7 ] .default_trigger = "default-on",5 a& U- s- E: |! p
},4 D' ]+ c: ]; |3 d$ e, v8 W
{
$ {1 k6 T5 W, i! C( X2 L6 E .active_low = 0,
' I+ V, h! s5 H .gpio = DA850_USER_LED2,+ x5 m* D' U: C1 |) p4 `2 M' K/ I9 v
.name = "user_led2",7 F0 }& \/ C+ E" \; X# H
.default_trigger = "default-on",8 L# |6 k5 s& N/ i6 z" R, V2 M% u
},
" {6 v k% V3 q4 p4 k- u$ B- r1 O {
9 a& E8 W5 P" P" W+ i& G _4 k6 R .active_low = 0,% j/ A. z$ [1 K
.gpio = DA850_USER_LED3,+ W6 F. r' Q* d: D( z! |1 ~
.name = "user_led3",
& c$ K8 _3 w9 j6 r .default_trigger = "default-on",6 W& @) U! v/ H. I7 k
},
7 Z Y/ u. b# P$ |3 _; k" f$ ~};3 E B1 j& {- Q7 ^' e, c8 N
8 s0 S0 H/ X0 r+ lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( m0 J# _ d- J% M4 J5 E$ k .leds = da850_evm_tl_leds,) h2 V# o0 g5 T! f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 _* X! E# U5 x$ [& w/ a};! B! d T# A8 J. C
/ [# K0 B. m0 s' w, Fstatic void led_dev_release(struct device *dev)8 J% J% o" b' a( A; H: I
{
: a. z- s- r$ D/ k};
9 ?! J" _. `* C7 V, J3 O, C4 E2 ]
static struct platform_device da850_evm_tl_leds_device = {
# b8 N% O( w7 l" H$ }$ G .name = "leds-gpio",$ z; ~0 u+ @$ ?6 B3 z& [$ n
.id = 1,& w, G& }; A; {2 ?- D
.dev = {; Y2 j' ?: W1 J; a
.platform_data = &da850_evm_tl_leds_pdata,
( T# t; f( M' P% s2 y .release = led_dev_release,# A2 r! h+ u* w0 g1 U
}
; t, t \1 C3 _6 S9 h! {# @};
; O+ ]' h# |: o& @3 {
( l4 z& x& c7 f' E1 f0 H. estatic int __init led_platform_init(void)1 T* \8 ~0 H- P: O, F: a, n
{
* W5 p. o" t; u$ l* } int ret;
5 L9 q2 L$ U' X3 c5 c#if 0; \4 p3 W8 e% V
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& s1 c' c/ h" v4 G6 M, Z4 R
if (ret)1 E4 a) j! t! E: ~% k9 t$ C# _
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 _6 }+ \0 U. i6 p- Y1 ~+ `- y9 A$ l
"%d\n", ret);
6 U2 Z: W5 X) r4 D) g% i#endif" O% q3 y$ V8 g0 ^: r3 @
ret = platform_device_register(&da850_evm_tl_leds_device);
$ y+ p9 a3 e0 p+ j6 ~% y: \ if (ret)# z" o, q% W' ~ Q) @" D7 ~
pr_warning("Could not register som GPIO expander LEDS");
, Y- M8 \( Z$ C6 o. b else
?1 ]$ }0 G, ^: N printk(KERN_INFO "LED register sucessful!\n");
% X) O1 h4 g. \% N2 [
4 O6 j7 l7 ?2 Q( @! _+ @7 B8 ` return ret;
5 P% w! t5 h5 u3 z}2 F9 A) N. v0 G7 I% K0 G
, k# U2 {: T& x( {
static void __exit led_platform_exit(void)
; \3 [3 K* f# U1 Z* ^2 B7 r# N! H{8 ]7 g2 f, k& i7 A. l, O
platform_device_unregister(&da850_evm_tl_leds_device);
5 w$ }# {5 k7 _) U' U" I
2 ?3 c c4 i7 Z. U4 b5 W printk(KERN_INFO "LED unregister!\n");: ]9 W5 o/ u S# ]/ B
}
- E3 L& f- {" o7 a$ K" n0 W) n' G$ J. W0 j3 W2 n+ S8 M- l* C
module_init(led_platform_init);+ H8 W7 z: U* y! ?7 b# P! ] h
module_exit(led_platform_exit);1 g2 b; z6 c1 o( n0 L( b# n
# d9 r# ~* k4 w$ l( k- G: AMODULE_DESCRIPTION("Led platform driver");
, [* F2 b( g# BMODULE_AUTHOR("Tronlong");2 h$ [( D, m. p8 I
MODULE_LICENSE("GPL");
& G {# T( w, X% H! }
) i0 `; Y2 s* |/ l4 H( N, f |
|