|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 @; b9 t4 `6 T( W* m6 s2 G) H
#include <linux/init.h># Y2 a( E5 C: G+ _( w( C! R+ ^1 G, f
#include <linux/module.h>1 o9 v7 U( _; I/ w4 Y2 U
#include <linux/kernel.h># X; O4 G: q& i( l. c6 o+ k% {
#include <linux/types.h>
0 L- ^/ r, Y( O( x" ?5 t9 B. P/ r#include <linux/gpio.h>- G/ U" S; t. ?' s0 p
#include <linux/leds.h>
- p# d& s4 q9 a. F8 |6 ~#include <linux/platform_device.h>
0 Y v7 H# s. r, t" d* a9 q* N; z" b- a8 |5 T; W5 d% l% [
#include <asm/mach-types.h>
2 T! F- I0 B3 ^! N. Z& @+ B' o#include <asm/mach/arch.h>
3 K8 X }0 M& x7 s: C( w7 M#include <mach/da8xx.h>
1 e/ u' m- I7 [+ r \# i#include <mach/mux.h>& z! D' A3 L3 o9 p
9 f- r! a" x* G% `+ C: N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ W+ V! o* K( ?3 d# L
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& n2 L! {& u; B* z! N
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
V1 g2 ^; q$ r' K+ Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 Q7 g$ h9 K- G( g! U5 e0 N7 k
7 c$ ~9 x* `0 X' F2 A/* assign the tl som board LED-GPIOs*/- T+ u8 u+ X8 D% X: ~. @# f
static const short da850_evm_tl_user_led_pins[] = {
/ A8 ~) n9 M$ A% f6 B! a! E /* These pins are definition at <mach/mux.h> file */# ]+ B) ~: @, Y+ K8 |/ X$ _, p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: ]' v9 P8 c% d -1
9 E! X# D+ q ~5 ]" i};
5 @5 ^0 o* k' e: \5 M2 @
5 W8 r1 l8 _; k% i1 [) g# d, _2 ^static struct gpio_led da850_evm_tl_leds[] = {8 B$ M8 j, d, v/ f
{1 ~" y. c& E, O' W! C8 S; C) s; Q
.active_low = 0,
; F* m C2 n* U .gpio = DA850_USER_LED0,
+ w* w7 V) {2 w, Q% C1 P .name = "user_led0",+ ~2 M- B5 m- a3 ]$ a
.default_trigger = "default-on",
/ E* O: d( H7 y" ^0 D },( _8 v: _( x& L' b( f
{8 m6 R+ E% ]% m. z4 q/ ^
.active_low = 0,
( n5 h8 I F2 q+ _ ]2 I .gpio = DA850_USER_LED1,
& N! d* o; `* z0 r) @. O- Z .name = "user_led1",6 y5 x, G* G6 v2 c- H, X0 V& D
.default_trigger = "default-on",
' |% o0 J4 ]5 r- J$ b },
, F1 U$ \/ c- e$ \ V: W' x0 { {; k: J4 Z5 k5 ]$ R6 Z
.active_low = 0,, M: a/ k/ V' y5 K" v) ^0 [: e7 r
.gpio = DA850_USER_LED2,
) \) y9 M) @& }) v- k .name = "user_led2",* f8 p7 z7 a+ }" t' {
.default_trigger = "default-on",0 s! O B% u% |" x( V* V3 r
},
" a; I0 g* K& e {) r; T3 V% U1 L7 x& g. H# V: _
.active_low = 0,9 P& G& l5 b1 {3 `
.gpio = DA850_USER_LED3,
, H. h/ Z5 b- @7 O! t( @2 m .name = "user_led3",
6 V$ V( |, ^6 l E2 i; k .default_trigger = "default-on",' T9 ]! v6 J' m2 L, c0 G8 e, L
},
/ a/ W; D6 w! S! m6 X; \};4 N4 L2 X; a) m3 @
4 f+ x2 O) D% a" g# M H0 `4 H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 K$ X, F7 E) t, N" Q .leds = da850_evm_tl_leds,
( @5 r3 Y; G: l# D' h* \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: ?, ?1 z4 |" J" Q6 r' k* c. D8 z9 v};
2 v3 Y [; c1 j: [
4 _7 M& J, @& w; k/ istatic void led_dev_release(struct device *dev)5 S' F2 Z# R* [3 m# Y- E
{
$ R& v2 r7 l6 M};' U# O8 A7 M( t8 v' i2 V8 T
* r0 E/ L- J# }0 }+ c! B1 rstatic struct platform_device da850_evm_tl_leds_device = {
& Y, a7 D4 k G1 L( E! X1 J; ? .name = "leds-gpio",! f& n% Q; }4 g# ^) J
.id = 1,
, t5 C+ x9 P& q, g .dev = {3 X3 x+ g% D% b g
.platform_data = &da850_evm_tl_leds_pdata,
* h; G, K- \) n8 V" V* [ .release = led_dev_release,
& s2 L/ d5 R/ q1 Z5 b2 b" T }& k. F s; B1 o6 j2 e
};
- K4 z. b+ n$ G
5 t0 N& `2 f6 Pstatic int __init led_platform_init(void). A3 o; G$ ?9 d0 J5 I& ]5 p, [: l
{+ r3 `* s2 t8 q6 X. J& d( F
int ret;. i# e; X2 |: ~) r! e- n$ v
#if 0
1 u; D/ {% ~* Z) N ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ Q. ?5 i- u5 R8 b if (ret)
5 K- @4 d9 Y! A0 Z- J; W pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% Z8 N8 e$ @8 _$ F k9 {
"%d\n", ret);7 n7 T! u! h+ H1 Z8 C" s
#endif& p& P. l' t! K6 o$ E' _9 ]
ret = platform_device_register(&da850_evm_tl_leds_device);# z0 q& q) x1 T5 {
if (ret)
8 X2 G2 P# b& s P7 P3 ? pr_warning("Could not register som GPIO expander LEDS");
+ K" { f9 L5 B0 v else: V- s( k" G9 W$ B* h- A
printk(KERN_INFO "LED register sucessful!\n");2 Y: ^* t. l+ R d! f, Q. ?
$ o3 D! |+ b3 V; I& W+ ^ return ret;
& S6 G# r3 I7 p& m1 ]% g& r}2 o$ u- J# J+ n4 B8 D9 q, {; e
7 J+ N+ j' k4 n1 l
static void __exit led_platform_exit(void)
; P- _/ J e2 {1 D- k1 Z6 q{% A8 f) @/ s$ F
platform_device_unregister(&da850_evm_tl_leds_device);
0 p- z o% R' ^3 T
# e; k! U$ d6 l9 J2 n& T/ T printk(KERN_INFO "LED unregister!\n");
, n: \3 S* t& ^4 v}1 U U% C3 D2 ]+ T% \
2 t- Q; i# M4 G8 ?$ v# h9 n
module_init(led_platform_init); I/ O! C; ?! u6 W. z
module_exit(led_platform_exit);
3 x1 y' ]3 W: U( g7 I/ s! I* _. a2 s# _, J* {
MODULE_DESCRIPTION("Led platform driver");
! a4 d1 F4 n3 Y7 D* d4 IMODULE_AUTHOR("Tronlong");
3 z, r. H( W' r; `4 zMODULE_LICENSE("GPL");
6 x* ~2 q4 J; U. L" x5 A/ i; o L6 h
|
|