|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 Z8 `* i' z" I; m
#include <linux/init.h>
+ J1 |" _: y: M# z#include <linux/module.h>
" p g+ g/ |+ u#include <linux/kernel.h>2 l+ H$ E1 f0 G- }' e( ~
#include <linux/types.h>
! t& d. |5 u, r' u3 L#include <linux/gpio.h>
- A, t" e7 |. E% W/ ?! m#include <linux/leds.h>3 y R; V9 o% v5 M2 q8 t+ o
#include <linux/platform_device.h>
" {8 _* e: r9 w/ N+ u5 m7 t+ P/ v1 e6 r; O- F7 f3 u
#include <asm/mach-types.h>7 G" ^6 ^5 [3 \) m, y
#include <asm/mach/arch.h>
. C2 [; \7 c& k0 S% W# s- a#include <mach/da8xx.h>
7 ~3 c: U8 V0 u3 M! v5 ` Z. K#include <mach/mux.h>+ n, k3 k; I# r) t
3 }+ |2 k- |& r. t+ Q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 \8 y5 L/ J; {( c* o
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% ?' V' u" I* u3 C2 T b" m
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* _) j. M7 s8 r
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 U! t0 G" _- c" z$ L7 k
! ^; B4 ^( f- Q2 e* W7 v6 ^( X1 h/* assign the tl som board LED-GPIOs*/
5 x! }# W; [8 |; ?" W) Gstatic const short da850_evm_tl_user_led_pins[] = {
7 t8 ^; U3 b$ g& P% b, H* A /* These pins are definition at <mach/mux.h> file */
( s* Z) ]' U! l; g# v' ~$ v8 p6 u DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 X: q5 i+ j7 N) s* ~ -1
_% M) x" J4 W" W* P! }};
0 q, }' [! ?$ _, V6 Q q, \5 |. C/ y: M4 @2 g! i
static struct gpio_led da850_evm_tl_leds[] = {
# {/ [% m( z! ~+ S, A {( e$ s1 p/ Z+ c! O+ G
.active_low = 0,
) v9 D( c4 d7 a$ r1 F" W- f .gpio = DA850_USER_LED0,
+ M; c5 @$ j, r .name = "user_led0",
/ ]* q, e. H8 H/ N* Y+ Y .default_trigger = "default-on",. i' z. u) B1 ~+ v! ?+ K
},
. s8 h) H( q4 {/ f4 L8 f {
0 E1 P; c' W# O' q: h+ I0 j3 s/ I .active_low = 0,- _8 K& ~$ q9 i; J$ X( P6 S% W: W% V
.gpio = DA850_USER_LED1,
' h: ~3 M+ k, I( g .name = "user_led1",
/ Y& Q- u% _" o% [ .default_trigger = "default-on",
7 h6 O7 \0 U7 N2 }5 Z },
" U" A8 b# [9 [* k m- g. ?: d {& o) e5 e$ G, J0 y: l- v$ f+ Z
.active_low = 0,
; D5 R# t/ r8 h# A* ]0 q4 K5 A .gpio = DA850_USER_LED2,
& Z- M3 ?% x# G .name = "user_led2",
/ y& l/ R9 \2 b. x8 p6 d+ i ] .default_trigger = "default-on",1 I9 X o( H+ c
},
m7 X1 \) I, ^) O8 C {3 M% _+ A5 X; l7 C+ ]6 T& p
.active_low = 0,
4 g( e5 P" N* w3 x2 c5 F- L .gpio = DA850_USER_LED3,3 W+ D8 H8 w1 b O. `7 V! D) {
.name = "user_led3",( r' `; m$ l0 r1 t5 l$ y
.default_trigger = "default-on",
( u# S8 t% Q! Y- Y1 [ },5 c/ e4 [6 F2 O0 E- r6 A
};+ r' i2 u1 A1 g' u4 K: T
0 W, w+ d& ~! B$ h, H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: m" U. z: [1 U2 g2 Y" l
.leds = da850_evm_tl_leds,
" [( ?$ Q9 j! T) F5 ^% `: A8 k9 F .num_leds = ARRAY_SIZE(da850_evm_tl_leds), K5 } N o3 M# t1 }& G" ?' n
};5 ]/ C+ m/ E S, {+ o. f7 `
! L# h1 |1 |+ C4 `- c7 {static void led_dev_release(struct device *dev)
; _! d `& D* r( D" \& C/ j{
6 H9 _" s. [! X2 ]/ P ^};; j( @! ~: D. d1 y+ \
" g. d2 X5 T5 i2 {: o; H0 p/ G2 o
static struct platform_device da850_evm_tl_leds_device = {
7 f2 S6 `" @3 w& V# J0 J .name = "leds-gpio",$ W6 g2 T9 b3 l9 g7 @/ y. c+ L
.id = 1,! u4 k/ r& G P; n/ U2 P
.dev = {
7 ?5 o* i$ W* n2 v .platform_data = &da850_evm_tl_leds_pdata,
: B7 V9 p# u9 @% J1 U& _4 y; t .release = led_dev_release,
X- q! m% L. z5 n* q }. I# ]' P' K# X- W B1 t X; ]
};
8 T' N2 ^, ]. R: n+ a
6 l0 O' B+ w) jstatic int __init led_platform_init(void)" P# `8 O( A7 E$ |
{+ d0 ]; Y3 u' e& a' z% ~# x
int ret;% L, H5 b i& G6 W: T# A$ F6 t6 j3 P
#if 0- N% ^; Z8 A! A8 v5 ?0 t% J
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. W$ q- f5 R6 M
if (ret)
* j' U% Y0 G2 i+ @5 G" | pr_warning("da850_evm_tl_leds_init : User LED mux failed :": { z# l- @( D9 I5 n7 ~
"%d\n", ret);3 L0 l+ N: B' D7 h! A
#endif" M: f1 f; a: {& W
ret = platform_device_register(&da850_evm_tl_leds_device);* G4 x' @0 D5 z$ s6 H1 G0 \
if (ret)
/ \( d; T/ }& `" z9 Y8 S7 Y pr_warning("Could not register som GPIO expander LEDS");
' @2 [0 h5 T5 U" r8 H else {* f: R; M2 ~, `5 k. G9 x
printk(KERN_INFO "LED register sucessful!\n");0 R9 O1 f" s4 b' d8 R
8 {. f" Z6 @& n return ret;9 ]0 E$ O# Y7 Z! V( d
}
7 J1 A% v3 h8 V4 g8 c$ z. q! {# B$ L X5 j( J
static void __exit led_platform_exit(void): n0 u& A% U- l: B
{4 {4 q2 y* U7 r3 O1 S! f1 _/ b. a
platform_device_unregister(&da850_evm_tl_leds_device);. a# E# h. P' E; A4 R
% Q, S& m" T& |1 O printk(KERN_INFO "LED unregister!\n");7 ?3 F. V4 S% N/ S* r; M) z
}0 e7 ~# s& D$ x; B( \( `9 f% y8 L
6 v( o* p$ p: k8 J1 I: V
module_init(led_platform_init);! Q. g1 ^2 w, D$ a3 [: p# C' x7 p/ V
module_exit(led_platform_exit);7 z( c$ T; L: g* V; n' I: a- y
6 i% j7 e- L F/ g- FMODULE_DESCRIPTION("Led platform driver");3 x7 A! Y/ b* v5 F
MODULE_AUTHOR("Tronlong");& w! O. l9 A5 b6 `- @
MODULE_LICENSE("GPL");! P7 q B+ s9 N' @" e* N% z
1 e) l9 _& z8 K+ Y. Q
|
|