|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 t: g0 |$ t n* o4 |9 M" o: z0 y
#include <linux/init.h>+ @0 f+ K4 F* M) @' n2 t# |
#include <linux/module.h>" d3 T3 z' g9 {8 V" Y1 v0 }0 W
#include <linux/kernel.h>: a2 B- Q, k; g' [
#include <linux/types.h>
* r. ]5 {1 L: M, \0 _/ v& h8 {#include <linux/gpio.h>
$ R' I$ ^) B5 o+ S$ T1 j! C$ ^#include <linux/leds.h>0 A# M3 w: K3 @! ?" ?9 J+ X1 C
#include <linux/platform_device.h>5 T X L+ F5 j8 T8 @, `
( U+ P- r3 a0 U# ^
#include <asm/mach-types.h>( g @% p1 Y* y; c
#include <asm/mach/arch.h>
9 }' H& m% a/ @0 X, n#include <mach/da8xx.h>; L# m7 P) B4 S: r% i! ~$ Z
#include <mach/mux.h>
$ |( m% z6 M4 W& m9 a# G
7 f3 u) Y/ y v' d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. B, M; i' G p- z! ^#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 x& n( p* G* E& @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 o" j* u- }$ j; q; t! }# j7 o4 q- ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 L" R3 j5 a+ i/ l$ T0 H+ k! M
! q9 a. c! J/ S8 |/* assign the tl som board LED-GPIOs*/1 W, R4 E/ O. _
static const short da850_evm_tl_user_led_pins[] = {! c0 O, e; [" Q0 p
/* These pins are definition at <mach/mux.h> file */
+ ?" ~+ P3 X5 c0 f% _4 Z$ ], s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ [4 ]: \0 ~" _# _% g& K& P -1
' l- {* P1 G0 }* p2 A};3 K' _( O$ O* k
. L6 E# d3 U' ?+ Z4 y" Xstatic struct gpio_led da850_evm_tl_leds[] = {
* v7 c5 D7 a7 q3 N0 q+ ? {
$ Q+ D8 ]; E% x+ ~9 T .active_low = 0, p n3 h- u! q" I F
.gpio = DA850_USER_LED0,
' k/ `- r6 Z; W& p4 P$ v .name = "user_led0",3 u0 P$ y, F6 _1 W# R; j$ r6 e
.default_trigger = "default-on",: V$ a, B. t1 A
},- Q7 f5 |* ]9 ^2 G3 D5 q: e
{
8 I: T: U# W, A, n .active_low = 0,0 K4 m4 L: I5 N
.gpio = DA850_USER_LED1,9 e5 f. R. y4 z, X
.name = "user_led1",
! ^4 J3 O: y( {2 ` .default_trigger = "default-on",5 z! x$ L3 f4 B6 d) n" F8 h& Z$ B
},
+ s& `, h8 w2 S$ z {
/ p% I4 ]! P+ h9 \# |: S .active_low = 0,
. u# o5 j1 e8 G4 c8 S2 W# B6 ]; o .gpio = DA850_USER_LED2,
1 F( O7 u" l, M. Q V .name = "user_led2",
. }6 M. [! Q0 k: T/ H3 F' q/ P .default_trigger = "default-on", [; S% w6 T$ x! N
},
3 N* G; y) e, u {0 X5 b- b9 N8 y' u
.active_low = 0,/ q" F$ N) L% n1 [, j6 s1 a, o
.gpio = DA850_USER_LED3,+ _9 o# e* c" ^1 g* S
.name = "user_led3",7 K% q* o3 S) Y. x
.default_trigger = "default-on",
: ^% ?% f. v& s7 q2 x: m+ f },4 b. |6 x2 W0 L( Y% Z/ ]9 m
};
# U/ ^2 u& M& C$ R2 D' N6 m& x# D/ j5 a% A' p% @- _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 c+ e3 s0 Z/ r8 |2 i
.leds = da850_evm_tl_leds,' e% ]5 B9 `# K3 k( q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 ]$ ^: O7 t7 v# L/ V: n% Y- ?) @
};
6 J6 @% W/ x2 P: y. J; J1 a# {% v* n* ?4 M/ h3 q7 L$ e1 ^
static void led_dev_release(struct device *dev)
0 p7 K$ L0 ` ^4 A{
- I: o7 v) x# H/ p( @/ L5 v};/ g$ t+ x( F. m* p' {& y
( d7 [, D6 C; N5 b& H. ]- {
static struct platform_device da850_evm_tl_leds_device = {2 i9 M' P* _! M! C0 H2 V
.name = "leds-gpio",0 C, i5 H* E2 n8 h3 X8 x
.id = 1,. \7 ]5 z [( {- X
.dev = {
7 t& `8 L) q2 I .platform_data = &da850_evm_tl_leds_pdata,
, U$ E+ N# N$ X; Q4 M9 G .release = led_dev_release,
- N; l4 z3 a0 _1 ]; A+ v }
: J& Y# c+ Y2 O4 ^};, r9 `3 q% q9 X+ N
1 I6 n) `: c; k9 A% E: tstatic int __init led_platform_init(void)
* i% M; t+ Q" _/ `/ F{
; H: l! [/ s0 f0 D" \$ `, _/ J int ret;
# u# i5 |5 _) c#if 08 s( g8 f6 D4 A& N
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 g/ I( r$ G' w if (ret)
" m1 S: k: |+ x4 W0 ~; t. ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) P! n* K) k' z$ E! R "%d\n", ret);
6 c5 u% [9 r. _8 [1 v0 y7 q#endif
9 u: H- w5 {+ E. W( P, { F* v ret = platform_device_register(&da850_evm_tl_leds_device);1 D% L% ~7 h! A6 C1 r
if (ret)" |5 \7 z! [7 o! G5 Y
pr_warning("Could not register som GPIO expander LEDS");+ d U. N2 t+ ]& @, l) b: ?0 R
else
$ S, Z7 G2 _" f) W G" C! U' \- N printk(KERN_INFO "LED register sucessful!\n");, a7 m' y/ a3 O0 i' i* g2 V$ P0 Y' X! h
6 q% ]5 M# \$ J8 L* ?3 ?: T y return ret;
1 z. j7 ]: }3 O1 a' M}2 d+ T9 q* m$ j' ^. {) N
& |6 o! U7 A4 Y' b# K, d" ^static void __exit led_platform_exit(void)
8 B- D" C0 ~9 O9 ~{1 _3 T h0 `& ?! T v+ Y
platform_device_unregister(&da850_evm_tl_leds_device);
! K Q7 \8 L9 R- V, {( h$ N+ g, t
printk(KERN_INFO "LED unregister!\n");
O- W/ e2 R9 n8 Z/ p3 ]}- ?; n) W) g, n
% _/ u/ M* E# y2 [% qmodule_init(led_platform_init); A% [" P+ c& B3 C
module_exit(led_platform_exit);: N# k4 v. d- D
5 N7 |% V& l. U8 r& vMODULE_DESCRIPTION("Led platform driver");
7 n" \2 H5 D. y& q1 mMODULE_AUTHOR("Tronlong");& w ]4 ?* E2 T' z: {# x/ R
MODULE_LICENSE("GPL");, I7 J( N7 G1 K2 V3 E
7 {" ^& L# V* [5 n1 u( Z |
|