1/* 2 * IR port driver for the Cirrus Logic EP7211 processor. 3 * 4 * Copyright 2001, Blue Mug Inc. All rights reserved. 5 * Copyright 2007, Samuel Ortiz <samuel@sortiz.org> 6 */ 7#include <linux/module.h> 8#include <linux/delay.h> 9#include <linux/tty.h> 10#include <linux/init.h> 11#include <linux/spinlock.h> 12 13#include <net/irda/irda.h> 14#include <net/irda/irda_device.h> 15 16#include <asm/io.h> 17#include <mach/hardware.h> 18 19#include "sir-dev.h" 20 21#define MIN_DELAY 25 /* 15 us, but wait a little more to be sure */ 22#define MAX_DELAY 10000 /* 1 ms */ 23 24static int ep7211_open(struct sir_dev *dev); 25static int ep7211_close(struct sir_dev *dev); 26static int ep7211_change_speed(struct sir_dev *dev, unsigned speed); 27static int ep7211_reset(struct sir_dev *dev); 28 29static struct dongle_driver ep7211 = { 30 .owner = THIS_MODULE, 31 .driver_name = "EP7211 IR driver", 32 .type = IRDA_EP7211_DONGLE, 33 .open = ep7211_open, 34 .close = ep7211_close, 35 .reset = ep7211_reset, 36 .set_speed = ep7211_change_speed, 37}; 38 39static int __init ep7211_sir_init(void) 40{ 41 return irda_register_dongle(&ep7211); 42} 43 44static void __exit ep7211_sir_cleanup(void) 45{ 46 irda_unregister_dongle(&ep7211); 47} 48 49static int ep7211_open(struct sir_dev *dev) 50{ 51 unsigned int syscon; 52 53 /* Turn on the SIR encoder. */ 54 syscon = clps_readl(SYSCON1); 55 syscon |= SYSCON1_SIREN; 56 clps_writel(syscon, SYSCON1); 57 58 return 0; 59} 60 61static int ep7211_close(struct sir_dev *dev) 62{ 63 unsigned int syscon; 64 65 /* Turn off the SIR encoder. */ 66 syscon = clps_readl(SYSCON1); 67 syscon &= ~SYSCON1_SIREN; 68 clps_writel(syscon, SYSCON1); 69 70 return 0; 71} 72 73static int ep7211_change_speed(struct sir_dev *dev, unsigned speed) 74{ 75 return 0; 76} 77 78static int ep7211_reset(struct sir_dev *dev) 79{ 80 return 0; 81} 82 83MODULE_AUTHOR("Samuel Ortiz <samuel@sortiz.org>"); 84MODULE_DESCRIPTION("EP7211 IR dongle driver"); 85MODULE_LICENSE("GPL"); 86MODULE_ALIAS("irda-dongle-13"); /* IRDA_EP7211_DONGLE */ 87 88module_init(ep7211_sir_init); 89module_exit(ep7211_sir_cleanup); 90