|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 {/ ]) b, H0 o) u7 s8 i#include <linux/init.h>
- u& B% Y9 w0 u% Y5 `. e#include <linux/module.h>
! X/ @, K# [! \) J#include <linux/kernel.h>4 E" H _8 q5 x, J$ \
#include <linux/types.h>+ Y) J; M# z' T7 m, F
#include <linux/gpio.h>
: d: b& r2 ]) k4 a4 t#include <linux/leds.h>
* u2 w" Y$ u, k2 ~4 s; N0 i#include <linux/platform_device.h>
( b% [* I1 a4 U. y2 q; ^$ R1 \- O" V8 z* l* U
#include <asm/mach-types.h>
6 e# e3 g+ k# z x+ Z#include <asm/mach/arch.h>
- n- h) L. Z: d$ J2 o' m3 e#include <mach/da8xx.h>
- x; I: j3 N9 A J# O7 u8 G#include <mach/mux.h>
7 ]1 C9 X) S# k7 I# t% R+ h3 R
' T4 a: ~' L+ R& R8 Z6 r( c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# w O7 U& _$ `" d$ u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! n. s$ m4 f. U+ g S2 B( k+ p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. v" g, B/ Z5 x, C) q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! [4 q. q, o9 E1 |5 A) U8 Z) O1 L( P, W' k0 v9 Y" D: q' }
/* assign the tl som board LED-GPIOs*/5 v* F+ @3 z! f4 n- G
static const short da850_evm_tl_user_led_pins[] = {% q& I) I, v9 d9 q$ g
/* These pins are definition at <mach/mux.h> file */
9 ?& b, l; o1 ]" y7 P5 | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, r% H) W1 m) X2 z, A- A
-10 @, a3 q! |" _" F; J4 [3 `4 o3 l
};
- V: c9 A* s1 b- t
! ]& q' x/ R+ _( G' W6 \static struct gpio_led da850_evm_tl_leds[] = {1 F/ U$ I- ^" I5 r
{
5 p$ K8 G+ F7 L6 m& u. t .active_low = 0,8 X4 I" ?7 P& o. ]
.gpio = DA850_USER_LED0,
0 W- \8 F# d$ R) F8 F9 \ H) K& i: g .name = "user_led0",
: V$ A: _7 ^* V: U' t! ?% C! v .default_trigger = "default-on",
9 p! G" V: W1 y- F Y+ k0 H/ q' Y. r },$ j* m9 ?: v9 d
{. O4 z. l/ x: @5 V( D1 Y. E
.active_low = 0,
) z# }$ D0 ?* | b; ^- Q .gpio = DA850_USER_LED1,) F; `2 ~3 x" d2 W; ~
.name = "user_led1",
( c' k: W# L% h. F .default_trigger = "default-on",* R( t. [: Y" t. i. G+ O, `
}," o7 O. _" y" |; b7 ]
{
- P5 c8 I l$ l5 v/ g% H5 b+ H' l .active_low = 0,. F7 L, N/ ~2 j$ `' z
.gpio = DA850_USER_LED2,) M9 |5 v' D0 Y0 a/ m2 x
.name = "user_led2",
( s h n) m1 \ .default_trigger = "default-on",
% ` _; q# w# v1 N3 C5 y },$ t/ f* |8 `, T3 O" W4 u
{5 H4 g$ O3 ~5 _" s" k
.active_low = 0,
: d2 |4 B. n2 U: g, K .gpio = DA850_USER_LED3,
1 F n% P) ?; k: | .name = "user_led3",
& E2 J4 E! s' w. x3 `( Y .default_trigger = "default-on",4 S1 s# i! V1 g1 [; K- r6 I
},
, h' b8 s: g% j: [+ S3 i5 a};
, n. i* }6 a1 ]" i! O
, ^! P+ |/ c# J( |static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( J0 g, Y! j/ j7 a% J4 L .leds = da850_evm_tl_leds,! g8 G x. e- Y) a& u0 F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 e3 v$ d' \4 ?. N. P4 M: S
};
8 n0 S# o2 o" [7 V9 }" U. R$ ~' W
static void led_dev_release(struct device *dev)* G3 a4 z8 o' b
{
9 ]2 L+ Q6 D$ d; h$ v};
2 O$ A2 x& M$ q) J& [
; [$ }1 z2 Y* s7 r- gstatic struct platform_device da850_evm_tl_leds_device = {
8 i6 [: A2 l( a7 s& {" K* r5 { b .name = "leds-gpio",
% @$ l7 ?: i1 b4 T& c .id = 1,
1 v" e+ Q( A# M) b .dev = {
8 m" ~) L$ R4 M" O& ]2 Z1 H .platform_data = &da850_evm_tl_leds_pdata,3 o; R3 |% U' F6 [8 F9 J0 ^ i) |
.release = led_dev_release,
! I; n, B6 y t) _ }
( c0 v* N, p6 s6 ], {};* Q9 K" H8 W; @; M
+ ?) z, Y9 S5 z) z9 Q" m
static int __init led_platform_init(void)
3 }, h7 I2 f9 c% K5 A{9 t+ b" B( a4 z: Y
int ret;. a! {4 B# }5 |
#if 0
: c' g4 s; k6 z/ c5 t8 ?8 Q r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 W Y" S9 e5 e5 W5 j* l
if (ret)
+ S% E/ W8 \! E7 K7 w$ t0 C8 t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& E8 N1 o! H# C1 s
"%d\n", ret);! p4 c8 Y: r" U- o5 H' ?/ R- g
#endif4 o9 g4 C z- ?1 V5 Z' n9 l5 D- f
ret = platform_device_register(&da850_evm_tl_leds_device);" ?" K1 c2 y* k7 n" O9 j' w0 f
if (ret)
* j @6 Q' ~2 ?8 D6 G: Q* G pr_warning("Could not register som GPIO expander LEDS");
3 I* u2 Z9 d! M else
( p9 n/ ^! E9 H9 h8 W printk(KERN_INFO "LED register sucessful!\n");+ H5 `! b6 Y; w* o
, Q) _5 c1 ~% o# q. n5 [; ] return ret;: ~, N. s. n' v5 r: {: s' |: x
}
4 c; s6 { R$ ?- j- J5 ?/ d; L* E. k3 U7 {% `( L
static void __exit led_platform_exit(void)
* h, m! P1 e9 g- g" V2 {1 A z{
; T0 B! L" M8 O2 v platform_device_unregister(&da850_evm_tl_leds_device);5 B1 D9 a0 a) b' f, ]
6 J. a, P1 A0 g2 G; e
printk(KERN_INFO "LED unregister!\n");, `6 }+ ]3 j U0 {( n2 d
}
) e/ l0 z6 u% r# S% w. D* O
! @0 p7 e L$ x. t6 b) o% tmodule_init(led_platform_init);# D/ v4 ~; w2 ~# `$ e( y, J9 V
module_exit(led_platform_exit);5 _, z( h6 Y w1 P' }
) ~5 s' O! K* @# g+ mMODULE_DESCRIPTION("Led platform driver");! y8 x# U8 \- H3 [5 y K/ l6 z' N
MODULE_AUTHOR("Tronlong");, z) R$ n- `9 `9 z: r
MODULE_LICENSE("GPL");8 f3 A) [# ~. l" ?$ [
' ~4 w9 T' F4 L) C2 @ |
|