|
求大神给下面的程序做注解,请稍详细些,谢谢。6 |" \& w. ?0 r8 v# u& x( r
#include <linux/init.h>' C* o0 A! U3 `- P: x" z
#include <linux/module.h>3 q0 @; A& h( n0 i
#include <linux/kernel.h>- } a1 ~ J5 U; I
#include <linux/types.h>1 r, j ?1 I# J. }- f
#include <linux/gpio.h>9 i8 J+ j' [: ^- v
#include <linux/leds.h>
1 h* z4 o* v4 n" H6 A% v#include <linux/platform_device.h>
& u# d; g, ^7 s \& T2 s7 c9 c6 U, Z) f; @8 |
#include <asm/mach-types.h>
+ b, h( g, p0 R# U2 Q% c* Q7 E* U( D#include <asm/mach/arch.h>- ]3 R3 ^% b/ X( J& b# e9 P+ ?, H, g! m
#include <mach/da8xx.h>5 h$ r% |0 z5 {
#include <mach/mux.h>
( l% X) B, D6 w
& ?3 L- @4 ?# g* ]3 }0 F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! f% E" G* W! H) Y4 z- }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ ]& H) U- ]7 s8 i) g7 J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- q+ H& Q) g8 o2 p0 v#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 D+ m) e' b# j# G
( [7 |9 ]/ i- r: p7 j D
/* assign the tl som board LED-GPIOs*/
& P# X/ \1 h' h' Istatic const short da850_evm_tl_user_led_pins[] = {
0 c8 Q! O1 L3 ~2 k. Z+ k /* These pins are definition at <mach/mux.h> file */
: |4 E: v9 X1 j8 y; _ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 c2 f# H: X" J- D1 ? -1
1 S |$ M; ?; _! }( d: x5 F5 q};
! I2 B6 }, U: T
: ?& a. y" p c- h B/ |% c; Q+ mstatic struct gpio_led da850_evm_tl_leds[] = {1 {) h# g# {6 ] M
{
; O9 A- z% x0 m8 e9 s4 L# Q) \. M .active_low = 0," ?4 N* Q) Y4 @0 g6 R* r: o
.gpio = DA850_USER_LED0,/ |! L- v0 V7 j0 G' n6 _8 P
.name = "user_led0",
- }8 H: x6 X' X: c( G; J) e .default_trigger = "default-on",
0 [8 @/ J1 j: W },6 g. F6 _, X5 h( d% K
{1 M0 ?& T# Z/ F# E
.active_low = 0,( @( G! ^$ _9 X! u+ T
.gpio = DA850_USER_LED1,
9 a, o" o* W: {& z u .name = "user_led1",' {3 b* m8 n6 A/ J
.default_trigger = "default-on",1 m' U9 u; C1 s/ y! Q
},. B$ @# P8 ? m) U. a, M" T
{
! H8 R* D) f7 y% ` .active_low = 0,% H* d) I; @- u6 u4 z6 U
.gpio = DA850_USER_LED2,0 `' i, ^& ]8 G4 r7 J; f
.name = "user_led2",7 L) z5 W" T4 W2 W; `( s0 B
.default_trigger = "default-on",
# r% O5 s% g; T },- X- ^8 [6 V$ e
{
2 {% b) S2 v: Z! t; f* S9 n+ q .active_low = 0,
& x. C4 A6 T$ [ _: j, U1 ^ .gpio = DA850_USER_LED3,0 Q# R! j8 s5 q1 G
.name = "user_led3",
+ T& c. T: f, K- J+ { .default_trigger = "default-on",' U' _. C* d& S* d
},
" M4 n m- }6 u- n1 R};
1 L7 J2 ^! t- k0 f2 V
! _/ ^/ e9 P# _! ]8 ]$ Gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 l. b7 Q. b/ @1 k4 J% y$ X
.leds = da850_evm_tl_leds,( K' ]) f4 y% `" J6 S
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 V9 `, I9 D' _, c+ k" ~};, w7 z6 p3 ]$ @- W0 o8 M3 v. ?, j" o
: {& ~- d' T- b! _: i) o: X; w
static void led_dev_release(struct device *dev)) r+ W( o2 C8 d# n" v- q3 f
{$ g* E0 W2 F) _& B8 H- V
};
3 N8 v: j3 u/ E8 L- g1 o$ n# v
1 g) K& G- j) _- d P fstatic struct platform_device da850_evm_tl_leds_device = {
9 m! x9 D7 p& p2 k: D .name = "leds-gpio",
) f, U; e1 G" G, J/ @: F .id = 1,, Y2 E+ j/ q) d7 k! b L i
.dev = {
" g/ j+ T7 s( T .platform_data = &da850_evm_tl_leds_pdata,+ [4 U( ^& T* J5 K0 z
.release = led_dev_release,) G% |- _( F8 b& N6 ^& b1 o
}$ u, i* e6 p& F; s f% F* O4 v
};
0 v! R" `3 o+ I6 H7 [5 V0 \6 G# `: P
static int __init led_platform_init(void)
: _, }$ d+ S' B6 \, t" c: }{
* ?7 K5 c- o, X/ j. e int ret;$ N. E; ~+ g T |# b$ s
#if 0
9 n4 G6 D0 l) L/ W9 @+ i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( ~" x& _3 {: `! g, `2 n if (ret)# z- W0 ?! v `' Y6 g7 f: O
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! D9 ?5 y, _ X% U# F z I3 n "%d\n", ret);- E& L6 V' @" S* H `, p, Z) `; Y- N
#endif5 m% V8 r0 f' A: ]* S& q0 d
ret = platform_device_register(&da850_evm_tl_leds_device);
4 u4 D. n+ b1 x: {5 g" Z if (ret)
0 ?0 T- U% t0 ?# u pr_warning("Could not register som GPIO expander LEDS");! V: Q- P9 h; K k
else. U. q) ]; `3 s% J6 J
printk(KERN_INFO "LED register sucessful!\n");
9 V* s- w( J( W) C3 P
) C( V5 S% ~* E% H8 Z: e, T return ret;
{* v! N! n p6 ?}" N& f- g7 X: U1 T, l! F
/ f! {# |: G# F) V8 U# f @3 fstatic void __exit led_platform_exit(void)" r8 d$ G6 \$ e) d
{0 ]3 c5 h" U& z0 c1 V
platform_device_unregister(&da850_evm_tl_leds_device);, J) x7 C3 x3 o$ h; F( e3 }
: z% @* f0 k8 Q1 E3 q, v
printk(KERN_INFO "LED unregister!\n");
+ A7 n0 n' } t}, `* X; Y6 l( R+ K7 @
/ N: p. F# e) b2 j9 A hmodule_init(led_platform_init);
6 Q/ x5 t: n7 ~% ymodule_exit(led_platform_exit);9 F- l( l# Q3 _- Y% k" W+ J
8 h3 }1 v4 ?! Y8 `* ^& j
MODULE_DESCRIPTION("Led platform driver");6 ~* f5 p+ D# y# m) g& q% Q
MODULE_AUTHOR("Tronlong");% a9 v: N8 \7 W( ?: P
MODULE_LICENSE("GPL");
" M1 X8 {( v; s. n% S/ Y# C8 `3 f' P& h+ ^0 I, Z
|
|