|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. O, T5 t. n# v6 D- q/ y5 n6 c
#include <linux/init.h>
* ]# |+ L9 L2 Z; e2 _2 k#include <linux/module.h>: h2 D, O* f4 b W' ]% M% ~
#include <linux/kernel.h>- M0 E# h! O0 t; u
#include <linux/types.h>; X7 e) c$ ^3 s1 Z9 c
#include <linux/gpio.h>& Z1 ?/ Q$ c# R8 h
#include <linux/leds.h>
0 {8 |$ c$ n5 w9 c#include <linux/platform_device.h># ?5 d; z: [+ P0 b' O5 C
$ i* Z0 E, ]0 x8 S
#include <asm/mach-types.h>
7 V! {: K# o: D. x; G" P#include <asm/mach/arch.h>4 X, K, N" Q: |) o
#include <mach/da8xx.h>
( {- Y: Y# N; {% h( F#include <mach/mux.h>1 ]* X3 N8 R$ E/ W# P% D$ C+ L% `) T
1 n4 K$ I0 V! T/ B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! D8 J; n) E( s# S+ T6 K
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- l! t# T$ z8 M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ X; }6 d8 Z, t- i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- l8 X& ~% N- T( }# m
2 A, H# n7 Y, l7 V' e6 A4 R. x6 t/* assign the tl som board LED-GPIOs*/
7 s3 i) {1 O( }7 Lstatic const short da850_evm_tl_user_led_pins[] = {
) S& t6 t2 |6 Q /* These pins are definition at <mach/mux.h> file */
& m, r- h9 |) G( Q1 S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 v1 ~3 E) S. J' B) Z+ l. | -1/ R8 f' o) D4 ^; z( F
};% i9 R; U' J" M6 F5 F/ ^+ B0 a$ y. ^
# j7 |8 _0 ~1 A! m4 ]static struct gpio_led da850_evm_tl_leds[] = {
5 ]& _9 r6 w! b" e; e5 t' z% t {
0 V1 s7 Y% J4 [6 Q3 z .active_low = 0,
- N' q% ^& b# f8 } .gpio = DA850_USER_LED0,
# a. b) ?5 k" I9 P .name = "user_led0",: [( \7 D+ o O% A7 c
.default_trigger = "default-on",- C: \( n m3 \. g8 t3 R8 `% y9 Z
},
, U$ }5 p8 h- {0 q {3 Y* ~% B7 M, c
.active_low = 0,- M8 `* ]+ F0 A" }# L. i: h
.gpio = DA850_USER_LED1,
; z* B; e- P+ n .name = "user_led1",
' Y0 ]7 U" M8 m4 q5 }+ u( Q .default_trigger = "default-on",
- _6 h( J- D1 E( H! ~. ~% ^1 q' c6 I* m },$ [. O; L2 ~0 F1 e" G, r
{2 n% i7 \* V4 b }
.active_low = 0,
C. G( w! `7 M0 N9 ? .gpio = DA850_USER_LED2,
! J3 T) O5 [# g& _/ R$ y" n% } .name = "user_led2",
5 v! @5 |$ u6 b' z .default_trigger = "default-on"," P$ o7 i) w5 G! I
},
& c% Y5 p- m3 G7 P. Y5 o2 z {& b. Z u C% E. ]
.active_low = 0,& }3 `, `. B- o" G
.gpio = DA850_USER_LED3,
/ z) @3 A' k4 H( n. F .name = "user_led3",
8 H* \. `8 m( n* E .default_trigger = "default-on",
! J/ x1 f* t( n: p. P3 ^ },
- z5 e+ K N% E6 Y0 y3 k4 t};; C5 C( ^4 M/ i7 s
7 B9 O% _& V2 I, v* \9 l! g( r/ Xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
\! J) M4 }' J1 S .leds = da850_evm_tl_leds,
6 U7 y7 H e+ @$ \# @6 h .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 J. B9 Z2 x3 ~; G4 G& g) W& `) ^};
: Z% k7 n8 z. S5 D' f, _' F. [( l2 q0 I% ]
static void led_dev_release(struct device *dev)
) [4 b! O3 u+ [6 a{
4 J+ t" T1 d z* ?# ]+ x};5 Q0 m! ]. b- q; F" S3 t
. S: ~1 a3 A0 Q7 s* xstatic struct platform_device da850_evm_tl_leds_device = {% k. _$ a& s1 g% Y3 J
.name = "leds-gpio",& o* T" f+ I8 h: U0 b6 M
.id = 1,& Y4 N. G( b( s4 R( Z1 b' Q
.dev = {
% M; K8 I* _! L) y2 ]) ^! j: G .platform_data = &da850_evm_tl_leds_pdata,
* N- a$ n4 h9 j2 {. f3 T .release = led_dev_release,+ n5 M/ l" }& C0 w0 e
}
5 U) i8 B5 a, i z" z/ W};
5 [2 U. q/ b2 @# Q7 X k0 v+ P$ r9 `! ` m' U5 |3 [3 a+ W h6 Z- ?
static int __init led_platform_init(void)
. Q6 q, `; m7 T' z0 J{
6 u6 {! u( q* J( M, P int ret;& D2 B. Y* `+ O& H# n
#if 0
2 J8 `( x, r, S7 G/ d4 F ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' Q. o1 p4 |# n# [) ~
if (ret)
; E* E- C/ q- n/ A2 ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :", Y, z1 X# t# i/ S# ~7 r2 u
"%d\n", ret);
" e9 p u$ V8 O8 K8 s) ]#endif& I/ \# j" J# p4 c
ret = platform_device_register(&da850_evm_tl_leds_device);
: e! {" `* A: ~3 h if (ret)' f2 d# G) x( X y8 L, \1 e
pr_warning("Could not register som GPIO expander LEDS");
! b0 }* Q+ ~" M3 }9 | else: y) N" k0 M- w5 ~# @( B" t' t
printk(KERN_INFO "LED register sucessful!\n");% R; C O' n) S' c# H, n! c7 [
, ^4 ?; G3 i/ |# V5 |3 w return ret;
5 L; r8 y9 Z' W& e}) W/ c; L A' c0 e% M2 y
, |2 P% y4 k, @7 Mstatic void __exit led_platform_exit(void)
1 C1 D$ O7 ]( C{. y7 r7 \+ x6 ?# L/ `* M8 J$ ^& J2 v" H
platform_device_unregister(&da850_evm_tl_leds_device);, k% b& C% W6 v9 n
$ i" ?. T; t K
printk(KERN_INFO "LED unregister!\n");
5 g7 V, Y( N+ q9 [ G4 f}/ U, C% [0 m Z, F
, N' y- A4 w, E0 q- v
module_init(led_platform_init);+ _2 h" x. D- {3 J
module_exit(led_platform_exit);
9 @1 p P9 V) S) A8 D$ ]5 E+ w' k# e2 s1 [
MODULE_DESCRIPTION("Led platform driver");
3 h5 Y/ z- N" [1 C5 z: SMODULE_AUTHOR("Tronlong");
2 v$ ~& d6 Z- z: e# DMODULE_LICENSE("GPL");+ _; X3 t% Y/ W. N, G& ^ V4 w! \
, e0 A5 }- b0 y% F2 s: {. e
|
|