|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, ]* b: {) Q. w+ _; L
#include <linux/init.h>
( ]* M Q7 \; k6 B. b7 N$ d2 c. r3 P& y#include <linux/module.h>( ~0 N3 F1 B5 d( t
#include <linux/kernel.h>' A% R; n7 Z8 M/ Y- V0 `
#include <linux/types.h>
) y2 U! E5 e( A4 a6 l#include <linux/gpio.h>
/ l8 F: I% ~! _% @2 y- ?- @#include <linux/leds.h>! Z9 j8 I. z7 w# m1 y |
#include <linux/platform_device.h>* x" Y3 B# w" X
* L4 ?* u9 M4 U: N9 A% z
#include <asm/mach-types.h>
; G" e: V5 K1 c#include <asm/mach/arch.h>8 g+ x$ H9 p+ s
#include <mach/da8xx.h>+ ~, n; i7 ^, R8 R9 F
#include <mach/mux.h>
% @0 D' h* O% v
+ m, ]" w! i3 @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" ~6 G' _% p/ \* T4 [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; M& _# `. a1 N- }$ |, M' v#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 U- u" i+ b9 t+ [% C% G; {#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ @* q) Z4 I- Q2 K" R
. b: e: f3 A$ c, O+ ^) ?& B/* assign the tl som board LED-GPIOs*/" h( @1 a8 ]6 d9 ^9 L. C& C
static const short da850_evm_tl_user_led_pins[] = { G/ T' n. S2 z
/* These pins are definition at <mach/mux.h> file */
9 X2 o0 ~3 V5 ] DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% j$ ]& Y+ [# ?8 e2 g
-14 R$ c% a, T5 b( l r2 }0 o
};
1 s2 `0 R6 c- N, k' R) o5 Y" P5 i- C4 R! q+ I+ q
static struct gpio_led da850_evm_tl_leds[] = { }- R- @. m0 E& N- t" @
{3 e- |, L- N; B$ ]) m8 F* X5 i! [: O
.active_low = 0,
( H: n* t; |" u9 J4 y- [ .gpio = DA850_USER_LED0,. k$ S& L L; p4 h8 S
.name = "user_led0",$ R' s! `) I( }; v: i
.default_trigger = "default-on",: [. w. G& L, l. U7 a
},# r+ ?; e/ ]5 O6 g0 ~' `: I
{
7 x5 [! }* e% v! h* X/ e. ^ .active_low = 0,& Q" @: C) U* J, q% }4 l
.gpio = DA850_USER_LED1,
4 Z. O/ B/ E u! [4 ^4 \: @ .name = "user_led1",. H: p: t$ T- X& T* O. {9 Q# P$ s& `
.default_trigger = "default-on",
, z% x; @# }0 @/ Y/ Z5 q; r },
* Y8 ]. X; y8 m; a {
u# x; _2 \* ?9 V0 @6 P( n .active_low = 0,
# c8 Q! Z3 H/ i! T .gpio = DA850_USER_LED2,8 E# L9 T' ] e4 d* T/ g& [
.name = "user_led2",
1 e4 c% g. H" n+ f7 h .default_trigger = "default-on",2 _% l8 ~4 O1 M+ T3 k' Z( e4 J/ E
},
% p% M4 l0 c6 D+ `0 f {- H- c. {. p# L- Y: e
.active_low = 0,0 @0 a3 n' k# W/ c/ M: {* F' e
.gpio = DA850_USER_LED3,
# X& ?# E3 Z) B* j+ o .name = "user_led3",4 d2 _4 P6 F& |7 {* M3 t( |
.default_trigger = "default-on",& E& T3 F- v4 g- w: F
},
! V; t" A( u& w3 a+ l& _};" E! o! i6 o" n7 s0 D2 ]
* Y0 R0 J% ~# z O- \" R; @; Vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( l: Z4 Z& v! B .leds = da850_evm_tl_leds,
) h* G7 A" [' k' B) R# C9 T2 O .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 S5 L; @8 i. } u, r9 n& e};
$ i) W/ k2 ~# H) {7 M. v8 c5 ?0 g$ z6 v; a: i, a! H% s, U6 Q
static void led_dev_release(struct device *dev)$ o6 N# F2 N' V# }/ K: G8 Y# i( Q0 Q
{
! X$ k" U, K: S0 E* F7 | \};
, y9 l. E% e9 }7 ^9 W! _
) N5 t+ _, n) K, d" B9 D, n$ \) P; Lstatic struct platform_device da850_evm_tl_leds_device = {
# ?2 [; P+ T3 M1 `( W .name = "leds-gpio",# F+ e) X! t" L" B) B% m+ D
.id = 1,7 U6 ~1 M5 Z* R% w
.dev = {
' Z9 X& D9 K: B .platform_data = &da850_evm_tl_leds_pdata,1 I9 N5 Z/ N$ K3 [) K+ s+ ?( B0 Z
.release = led_dev_release,9 d. e0 L9 ]3 O( D7 G
}
* y. H% b% J$ D' e i};
& Q+ h% E2 C9 \+ o3 m y$ U7 v/ o: |1 p, }( O
static int __init led_platform_init(void)
' o" j5 i+ j' Z# X; I7 c" g2 G{; G7 k0 M& H3 C9 ]8 E1 a( Q2 c$ k
int ret;
8 s% Z7 w* b( ]3 Q. ]#if 0
# R" `+ T; a7 A5 G9 x& J, K' k8 S ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 t2 L# m/ M/ {8 u+ D
if (ret) s/ E! _' n4 ]5 P6 O5 j( R( I1 M
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- Z5 r% X& ~8 G& ^4 V p "%d\n", ret);6 W0 j# t9 W! ^" t/ }# H( L5 V
#endif
* H0 J' S3 F) D/ F8 A: Z' @9 A ret = platform_device_register(&da850_evm_tl_leds_device);$ z0 j" `, \ ~+ g$ d6 N
if (ret)# Q' z' h- ]: G6 ?# I
pr_warning("Could not register som GPIO expander LEDS");& w2 a' ]' Q: M/ b2 l9 a. H1 U
else
& {, m. H+ T7 k" p& w& D0 p$ g" O printk(KERN_INFO "LED register sucessful!\n");# `+ \+ V) |- N8 X. p
( a$ s3 K( @ u5 Z
return ret;
7 Q4 S# p4 G" X" ~! J}
, [3 [# C5 z1 |9 B
" O# t- m, \ }static void __exit led_platform_exit(void)
! P' H* P0 u% p/ D{
/ V5 ?2 t& g! j platform_device_unregister(&da850_evm_tl_leds_device);+ ^* v5 H5 G, M0 ]1 q
+ c u4 E3 }, P0 w printk(KERN_INFO "LED unregister!\n");2 t. N- { ^) z1 T
}
, [8 F4 x0 q% m% K* Z( g) ^( M! _ L4 J3 \6 @9 `
module_init(led_platform_init);
9 F" h% k2 H4 v! @$ S: T! Rmodule_exit(led_platform_exit);
" m, u# C/ ~/ J
7 v2 ?# M: J: ]2 U9 h) j% mMODULE_DESCRIPTION("Led platform driver");& k+ L; {- _' Y9 m( t2 A; r& O
MODULE_AUTHOR("Tronlong");5 m, H! S2 g W" E9 b: b
MODULE_LICENSE("GPL");
7 p2 E# L( z! p9 u
. l$ Q9 G9 {$ T$ ] |
|