|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. c2 v; T/ h& u: X) ^% }
#include <linux/init.h>
3 p" D r( o5 P8 N; M% O0 ?#include <linux/module.h>( m, r) z2 C! V+ d4 m
#include <linux/kernel.h># U0 U! _* H$ ~& q+ Y
#include <linux/types.h>. G5 b6 w. S6 t: E8 i0 w
#include <linux/gpio.h>! o5 K2 n8 x6 h8 f5 ~' r
#include <linux/leds.h>
. y0 C% D1 M% L! t! A" C' m#include <linux/platform_device.h>0 G9 M M( Y5 c8 ?/ x8 x" I1 Z, M
+ C6 ?7 o& _$ c: S; X#include <asm/mach-types.h>! t" V8 x( P' [
#include <asm/mach/arch.h> N' w; q w% Y5 e
#include <mach/da8xx.h>; R4 `/ q' K! X; f; G2 ^" p, o
#include <mach/mux.h>/ }. a( e& M& c' B
2 K# ^! l6 e% o
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ F2 d: Y. J8 ~1 y' Y6 w
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 F7 v4 x# b+ b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 p2 p( o" f3 S+ a+ d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 M9 s1 q* Y4 P& |- q
* z8 t1 m# u j J( w2 H
/* assign the tl som board LED-GPIOs*/
+ x5 }5 t7 d/ y, V3 ^& C% Wstatic const short da850_evm_tl_user_led_pins[] = {
5 E4 f' F% f; H! }0 l; o /* These pins are definition at <mach/mux.h> file */
8 ?1 s; o/ { D) P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: h8 R; W' m8 b* w6 X" d
-1
- F) Y" p- m6 H; h0 w; D: `0 g};
7 q, v3 j$ m/ u2 G8 d5 S2 L" s. c
static struct gpio_led da850_evm_tl_leds[] = {
. O& `) d% i( S# g: r) h {3 D' P1 q1 ~/ W* n/ [; W
.active_low = 0,
0 d1 o& |" o) h! c b; n8 L1 S. I( ~ .gpio = DA850_USER_LED0,& Y$ ^1 I9 s+ t2 r
.name = "user_led0",
. `7 K2 i, l- E. b$ Y e .default_trigger = "default-on",3 P: V& g' u# |9 \* u
},
. `1 Z& j& r/ H5 n/ T {1 d A2 i! r5 o5 O H
.active_low = 0,
& y- g- n4 D% M5 y .gpio = DA850_USER_LED1,
4 R/ l0 \. ], l$ i! {/ b .name = "user_led1",
' A" p4 W/ I$ j! Q9 r2 p) i! h .default_trigger = "default-on",+ L, K7 R. `- V$ V" n6 C
},$ t. p O, E; E& }( Y2 p
{
V5 }( W A% m* g .active_low = 0,
1 V* o1 G6 |% n; t .gpio = DA850_USER_LED2,
* Y8 k0 l& z( d( W: k! W( T4 w .name = "user_led2",
! C4 {8 j, g: h, Y- _+ l7 ? .default_trigger = "default-on",- a ?4 Z" m8 m
},/ [; Y2 [' B3 O7 [0 o
{
: o8 _ o& o' Z; b9 V f0 z, X .active_low = 0,0 y# }8 f4 {, O& q7 c+ q
.gpio = DA850_USER_LED3,
. i" j3 x3 m8 \% ] .name = "user_led3",+ \' U8 [) q! D$ d! `$ [ z
.default_trigger = "default-on",7 n& Y" U( ^% ?3 ?
},
9 _: P# j# o5 O) M7 I+ _4 M4 K7 ?% l};' w: F5 \8 b# P4 }* m
. u3 x# i: v# d+ t& W7 g# D( j& estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
g8 P4 b5 E# ~7 a" j3 t .leds = da850_evm_tl_leds,
/ Y8 k: p# L, V! n2 s2 `3 o# ^, h .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' ~6 j: c) A7 m3 y' I; m0 G3 o};( l) m8 p# E* v# P- a& P
2 v: D$ _. W% x/ {- {
static void led_dev_release(struct device *dev)
( i0 t7 a$ X4 U4 u{
% w- j4 d6 c$ _) B, l};
9 y2 w! U3 o# ~( u; q& _
1 {! P m; p! N' D0 Y2 ~static struct platform_device da850_evm_tl_leds_device = {; p5 b+ G" b* q, u: l; q8 ^- d* [
.name = "leds-gpio",
" Q/ B8 I/ z0 d% l& s. V& C .id = 1,
0 m! ^# t4 h/ K8 \ .dev = {* K0 b# l3 j, O. Z3 d! i5 g% ~# D$ h- Z
.platform_data = &da850_evm_tl_leds_pdata,5 m# Q! ?6 p6 _2 c
.release = led_dev_release,
# X7 C2 x* m& l. @0 R }
) ?' B8 p4 V' o1 ~; ~2 v# n};
% H9 u! Y6 s4 ?; J4 c7 F. `" z8 ~; B. \: n% u' [* {8 p5 ^4 P$ j
static int __init led_platform_init(void)" O6 d! c# @; c" d1 w2 l8 _% ~7 p
{/ s: z) o4 q7 B# P I
int ret;$ w' a! F/ s, E9 o
#if 0
9 g3 N$ S0 P$ k" O# |& { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! C/ q, M! U; L3 O3 D. u2 T if (ret)- R( W0 } O/ S8 c6 \, a
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 N" z: k, h- ^9 ~
"%d\n", ret);; X3 u" r/ Y5 k4 M1 k* y
#endif1 \' d0 T% k" J. X* o
ret = platform_device_register(&da850_evm_tl_leds_device);
3 O6 ] S7 Z5 }4 e1 l if (ret)
1 k+ l& m8 a1 V6 } pr_warning("Could not register som GPIO expander LEDS");
/ ^0 N; ~+ Y2 G/ u7 h7 ]+ T else# r7 |: b; h+ Y
printk(KERN_INFO "LED register sucessful!\n");8 V3 T* Q9 |' z; n. x
. y# x5 E% S) L return ret;
5 q+ n2 D% q) l}7 A4 O1 @0 O8 M- c
) H' ~) k+ d) p0 G" Z8 I U
static void __exit led_platform_exit(void)
/ u2 \/ c+ M$ B( E" x0 |{
; z% F* P2 I* w) P) w platform_device_unregister(&da850_evm_tl_leds_device);0 y0 A: Q) {! z( k/ e
' h4 ~ A: @; P- L% d printk(KERN_INFO "LED unregister!\n");
# }6 F% ~6 Y! }}
, b; R5 h. F; R2 O5 d. ~1 i1 _0 W) Q) e( N6 ]
module_init(led_platform_init);! G& k* m' K- e* H. S
module_exit(led_platform_exit);/ T- b. c' S" k4 C( D) |
9 }' `6 ]4 }" `! D
MODULE_DESCRIPTION("Led platform driver");
' v9 _ d5 ~( T& |MODULE_AUTHOR("Tronlong");/ @& g. b- |1 x# V
MODULE_LICENSE("GPL");/ v( D+ y: }: W1 R4 I% r
9 P4 {3 T/ ~* V N+ j; c" ]' q* k |
|