|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 O, V5 T. [ h/ w8 |" P- @& y6 |7 H3 n
#include <linux/init.h>. \$ E i |+ r& a
#include <linux/module.h>; A3 k5 W- i, c( P+ g% I( `
#include <linux/kernel.h>( _/ T9 z) Q6 d. K, G
#include <linux/types.h>
) h( a/ }7 k; ~ t! b#include <linux/gpio.h>9 K8 t, d- E! p# w/ t5 U6 A0 D$ p
#include <linux/leds.h># v: n0 I$ I) p4 J0 ?6 t
#include <linux/platform_device.h>1 S4 {- @2 R* H1 g: b5 F) n
% y; [% C, R# d
#include <asm/mach-types.h>
. u- ~# N+ w6 F1 A" X& @! X, t5 F#include <asm/mach/arch.h>
; g9 M" x% B' `$ w! u#include <mach/da8xx.h>
4 K$ d% V8 a' [8 |7 k8 q#include <mach/mux.h>$ m& a' Q7 d& w6 N; j; A, q
3 _' o$ W4 r4 @% ~- M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), g5 \. L4 B# e9 [. F. R; c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): D8 f% b' {$ J3 J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 g* N4 p6 F/ j' @/ P1 K3 M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 B& K4 u2 H7 _
! b. F4 K+ j% b8 _ F2 v$ v! V/* assign the tl som board LED-GPIOs*/5 T4 K9 l/ z5 |. t
static const short da850_evm_tl_user_led_pins[] = {" D9 C* H- a4 X- [% ~9 P# J) u# [
/* These pins are definition at <mach/mux.h> file */
( q3 C3 E* C+ I: L DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- X' Y! e* E7 \* V' a* h3 Q6 V R
-1* Q3 N+ r I' E& A! U' @! F& x
};
) k- s3 q( ^, y9 i) W+ p* M
/ |3 K9 A% k1 D) X Zstatic struct gpio_led da850_evm_tl_leds[] = {
. v1 I: w5 |, z! m$ [4 s {
( h& g. q5 U+ I$ F0 ?# |' F .active_low = 0,
% R* g* @! |: z# S# @& A .gpio = DA850_USER_LED0,5 Q4 r' {5 M. f8 q- a
.name = "user_led0",7 o- i3 Z! K" d. ?9 c: G
.default_trigger = "default-on",7 x. v$ j! U, x; I; {8 ^) [
},% n0 ^0 Q; U0 g
{
' z& O! T- j# M1 e; X/ _6 B' i3 V .active_low = 0,
% i/ b& Z; e* X5 J- r( W( a .gpio = DA850_USER_LED1,3 S" u$ G) @1 r+ }" r
.name = "user_led1",
6 H. e3 I' b# U& m, ^9 Z .default_trigger = "default-on",
) q; B; v, v( s/ w( j0 _ },
* O* ~* `0 J3 j" J5 v5 K {
9 ~2 z2 M ~& c6 Z- x( h* z .active_low = 0,( F7 V# O5 V) n& k9 H- l, T! M2 n- @4 P) e
.gpio = DA850_USER_LED2,6 r: d4 L e8 b6 K* o$ k0 Q
.name = "user_led2",1 ^9 A/ K' f- K& V3 f
.default_trigger = "default-on",- F n# g! _6 l
},
: g" C9 j7 p. q& X3 ? {
% r# b' t$ x( ~& }1 C$ m% B5 }* X .active_low = 0,
, ^( B5 o/ U* q, ~7 Y( w .gpio = DA850_USER_LED3,- M. \ p: H% E/ ]2 E) Q
.name = "user_led3",
! Z- `7 F4 v7 o: w$ l .default_trigger = "default-on",
3 S2 g& Z, U- A/ O' |( C$ z5 b/ e$ D( _) r }," n) l. \7 ~) u: H$ P
};
/ ?' z; y" N# {2 H# J9 k6 i7 Q, B5 o6 M2 @6 s) K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; C6 T# l9 ?: Y, @/ o6 g .leds = da850_evm_tl_leds,) R8 R$ g$ K5 K- w- E. K# E
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 l! Q* `4 S$ h2 D
};' E. z' J8 w* k/ r) Y
3 ^5 L6 \+ c0 n* W# L6 `
static void led_dev_release(struct device *dev)
, p, y) Y$ R. w7 D( t3 _{
. r. q1 \( v" @5 e# O5 O* x2 y, T0 h};
7 i, a% P) |# I$ K) N& N0 _" B3 i
7 R5 m6 H, c' N- e. j7 n! ]static struct platform_device da850_evm_tl_leds_device = {
5 D: m3 O2 q/ @( M .name = "leds-gpio",. D/ c* i, W& C8 X
.id = 1,
+ W( |1 [2 N" ]/ r7 X+ ?1 l; @ .dev = {
4 v! I7 y# K- t0 Y2 d, R6 B4 p .platform_data = &da850_evm_tl_leds_pdata,. P, W: T6 R- e2 @
.release = led_dev_release,8 y( }" L: Y5 D8 B# |3 L4 V
}
8 `/ c; C# Q/ M1 i. @9 w};
* ~- D# A! ] o+ S7 {: J
# S, ^9 L6 Y, l, L: s3 U1 Estatic int __init led_platform_init(void)0 Z4 L7 s* Z7 `: z4 h& H5 p& {
{
7 { w( l E0 b* {, x int ret;
; }( o9 A& }5 \+ m7 y#if 0" _6 l4 ~ M% ?4 f
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- ~+ D" D1 |; A( L+ b
if (ret)- |* c, D) R/ B, H6 L0 n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# q, K2 q. ^2 z7 }5 n; p& ^* L1 \ "%d\n", ret);
8 ?' L7 C& c1 B#endif
4 e1 _# ^, l) i+ G/ ]8 c* L ret = platform_device_register(&da850_evm_tl_leds_device);, y5 Q& j" W( S# v: [
if (ret)# I; Q5 }' q8 q# f0 N- B
pr_warning("Could not register som GPIO expander LEDS");& Q, m1 \1 B: g
else
* ?8 \ }3 l- a# q) [( O4 | printk(KERN_INFO "LED register sucessful!\n");
; D( H' W: [6 N
: |9 ^0 A9 ?+ ~5 f% U( B return ret;
' V3 \; Q" s) _}
; [( W* U. q# f! F4 X
* D" H G" Q( W7 ]4 A* Sstatic void __exit led_platform_exit(void)" Y# {5 V3 x; e" T% \
{
0 S/ P7 ]( t* e- V0 W: c platform_device_unregister(&da850_evm_tl_leds_device);
& V" H5 e6 k+ E9 L m& D! X$ M0 }: l
3 V8 D# g% E4 U! t4 d printk(KERN_INFO "LED unregister!\n");. r0 A/ }8 D4 L1 Y f2 e' A
}
0 K7 p0 {; W+ Q* {- V" E% q
$ u4 Y! v. z& a% j# e5 Nmodule_init(led_platform_init);4 v1 {8 k5 D1 C8 }) u! N H# E
module_exit(led_platform_exit);
) m- E9 L; o. u" M2 B7 W
% a3 f' C. X) k+ ^& y) g' jMODULE_DESCRIPTION("Led platform driver");# q$ T% F9 k6 \9 O x
MODULE_AUTHOR("Tronlong");
9 M! S$ v9 H5 I! K7 ~6 d# mMODULE_LICENSE("GPL");
! Q5 c3 T! O8 D' \9 w0 e
# ^4 _& L3 Z7 @; p4 j; A |
|