|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, v% u) H! p9 ]( r
#include <linux/init.h>
) ?* |3 \, c5 b9 A- o#include <linux/module.h>
+ v8 D" {! ]! n8 w#include <linux/kernel.h>
. O# a# v6 q* h* E' I+ j#include <linux/types.h>3 n9 F$ f: _: |; T
#include <linux/gpio.h>3 i6 I0 t4 y: L( k! [
#include <linux/leds.h>
0 O: B9 T. G, R#include <linux/platform_device.h>& Y1 V. E) ^( x3 ?" ], U
2 Y7 K( `/ a$ X0 h, A
#include <asm/mach-types.h>
1 @( M2 h0 F% x* o! Q: b& \#include <asm/mach/arch.h>1 g+ I8 ~6 i2 s M
#include <mach/da8xx.h>
3 `7 X! u- ~, I& s7 ^& [#include <mach/mux.h>
% {2 \& ?8 z) P" o- j# {' y0 {. `& O0 q' M% r$ B8 L. n! m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: F Q% n7 ^3 h$ R0 x1 I U/ K# X#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ p' g- @5 V* p
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- f! U$ N$ p/ [$ O
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ o* s( [& k* m3 i, _! b
7 ?3 \% I9 a! \% J/* assign the tl som board LED-GPIOs*/. N3 I/ U. Q4 W1 } V
static const short da850_evm_tl_user_led_pins[] = {0 }9 R# o& n* |3 X0 X3 D
/* These pins are definition at <mach/mux.h> file */ D. X; P5 C( X$ G3 w$ W
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ A6 R* j3 T' a r& t -1
& G8 X! @5 D* \0 \0 ~};7 D1 [$ [6 V! t& R
$ U! {& p7 n C, R( J3 C" O3 d
static struct gpio_led da850_evm_tl_leds[] = {& J* B5 C( y( ~1 z. q; _
{
& }& J* M* U5 t! W0 u1 v .active_low = 0,3 Y; g" e$ c# g% E: P3 U
.gpio = DA850_USER_LED0,& e7 P* X# j1 J
.name = "user_led0",) ]) k8 T7 L7 M1 Q
.default_trigger = "default-on",' o0 b. T, P8 Y5 y$ R8 ^
},
( V4 z4 M) C( b# r {
, \8 g7 c8 R, A! r .active_low = 0,; f8 p K3 c6 p) h
.gpio = DA850_USER_LED1,+ q2 g6 }$ C6 S# i: m1 q
.name = "user_led1",
& m0 ^- G! w4 V! q! h, R6 Y .default_trigger = "default-on",8 z) K" i& u# K6 L5 h1 D
},
4 A6 e- ~" k5 ] o/ Q* j {+ W Z+ Y) J& S, R, r& m) l; o
.active_low = 0,( r/ ~, V" a( k+ q0 B3 e/ A; f
.gpio = DA850_USER_LED2,; Q' B2 x# [. }" A
.name = "user_led2", }% e) P# Q Q1 {$ n8 ]
.default_trigger = "default-on",
6 {# Z& h7 N5 T% i9 e u },
s6 |4 E9 g$ F* U+ t) P {
( {. s( e' w& k9 }* H .active_low = 0,
) l. k9 d% r" P) W: S$ k- E$ Q .gpio = DA850_USER_LED3,
5 t( g# e; C# Z .name = "user_led3",' |, ?$ I" z6 Y: ^ P
.default_trigger = "default-on",
/ _1 h y" p5 Y },
* R5 K- S# N, Y5 M% a};
8 F7 V6 T# ~; |. {0 E. F/ ]2 y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. V) a, i' V( M. |/ R .leds = da850_evm_tl_leds," r8 s' H7 f- a5 z. B: T* ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),, U. o4 `7 I( |3 g" C6 y
};
* f3 h6 m u! g6 `
/ B+ o& V- q# |5 u% g: G* n: j( Qstatic void led_dev_release(struct device *dev). K! L1 w3 p9 T) p) m
{
% e! J$ p/ V% O! ~7 C1 N};9 K* M( l" k- A; G
( g/ N4 _) U% b- K6 a" Bstatic struct platform_device da850_evm_tl_leds_device = {
, l+ d- N1 K: ?1 |; Y .name = "leds-gpio",
2 y& e8 \% G6 `0 w8 F Y: Y .id = 1,4 `3 c. p, F }6 Y
.dev = {
/ J2 `% V3 L U9 g$ q6 [ .platform_data = &da850_evm_tl_leds_pdata,/ \% d* Z8 h; n( v7 a- m# @
.release = led_dev_release,
1 U% L2 L1 i2 F* O) Z9 Y }
( M7 g }; y$ w9 M% i; |, }};
2 m8 W8 \( ]: d" E# y0 j
4 u2 U$ ^7 @# h- _9 e P" Ostatic int __init led_platform_init(void)9 x* \8 F/ g4 n% X6 }) U7 x
{
. q1 ~) v+ M: m, B8 }! _4 U int ret;
! V9 t8 e6 w: G8 X#if 0
+ X* J6 d# j5 T0 a' r- ~5 D4 g4 M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! M! Z" m S" O% @/ K) Z if (ret)8 ^1 @3 `1 @6 D% x5 D: T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 I( @" j" Q/ a' y/ o& K "%d\n", ret);
' r/ ]) i( e+ G#endif9 M# J8 Q0 @1 c/ B
ret = platform_device_register(&da850_evm_tl_leds_device);; A6 d$ s5 M0 \" U: `
if (ret)
. ~8 G# a5 [' j; d, I# y pr_warning("Could not register som GPIO expander LEDS");
" b- `+ u6 L) M7 g, E4 b0 s( c else
t3 K* u' D7 p; m7 p" \ printk(KERN_INFO "LED register sucessful!\n");
, h9 {* }' Q# Z* o
" }6 O% }$ l6 o2 S return ret;/ [5 c( }9 |& l# L# n/ Q
}- o: K1 t% n. i: q) Z: Y7 i
, q$ c8 _6 N9 k0 f5 Pstatic void __exit led_platform_exit(void)
3 K: x# x+ U8 H' N2 Q{
$ h7 e) V$ `) L4 j& P platform_device_unregister(&da850_evm_tl_leds_device);- i; a1 f j* @* @" U4 ^
7 P c3 k* |# u3 ?% M$ ?5 U7 Q printk(KERN_INFO "LED unregister!\n");+ [0 Z7 _: u, R7 L0 Y8 R5 C
}
) v5 J* R4 @. \5 I- m7 Q: B. Z5 D/ s$ p# q1 U3 r3 N. @2 h% D
module_init(led_platform_init);5 U- [! a; p% W1 E- Q5 @, Z
module_exit(led_platform_exit);
; ^. k4 S+ o8 n! B# k2 q0 d# Y' S1 c* h0 j2 k
MODULE_DESCRIPTION("Led platform driver");! D) ], L! N- K$ O# v
MODULE_AUTHOR("Tronlong");
7 J1 ? c: _1 U, m9 J* j* BMODULE_LICENSE("GPL");- V' d: {+ X: ~/ M
" c* f7 b( ~$ i3 z H2 g- o9 s |
|