NET: sa11x0-ir: move sa1100_irda_{startup,shutdown,suspend,resume}
Places these functions in better locations in the file, near where they are used. This saves some tiresome paging up/down. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
ba84525bd9
commit
cbe1d24fb7
@ -230,137 +230,6 @@ sa1100_set_power(struct sa1100_irda *si, unsigned int state)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sa1100_irda_startup(struct sa1100_irda *si)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Ensure that the ports for this device are setup correctly.
|
|
||||||
*/
|
|
||||||
if (si->pdata->startup) {
|
|
||||||
ret = si->pdata->startup(si->dev);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Configure PPC for IRDA - we want to drive TXD2 low.
|
|
||||||
* We also want to drive this pin low during sleep.
|
|
||||||
*/
|
|
||||||
PPSR &= ~PPC_TXD2;
|
|
||||||
PSDR &= ~PPC_TXD2;
|
|
||||||
PPDR |= PPC_TXD2;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Enable HP-SIR modulation, and ensure that the port is disabled.
|
|
||||||
*/
|
|
||||||
Ser2UTCR3 = 0;
|
|
||||||
Ser2HSCR0 = HSCR0_UART;
|
|
||||||
Ser2UTCR4 = si->utcr4;
|
|
||||||
Ser2UTCR0 = UTCR0_8BitData;
|
|
||||||
Ser2HSCR2 = HSCR2_TrDataH | HSCR2_RcDataL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clear status register
|
|
||||||
*/
|
|
||||||
Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID;
|
|
||||||
|
|
||||||
ret = sa1100_irda_set_speed(si, si->speed = 9600);
|
|
||||||
if (ret) {
|
|
||||||
Ser2UTCR3 = 0;
|
|
||||||
Ser2HSCR0 = 0;
|
|
||||||
|
|
||||||
if (si->pdata->shutdown)
|
|
||||||
si->pdata->shutdown(si->dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sa1100_irda_shutdown(struct sa1100_irda *si)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Stop all DMA activity.
|
|
||||||
*/
|
|
||||||
sa1100_stop_dma(si->dma_rx.regs);
|
|
||||||
sa1100_stop_dma(si->dma_tx.regs);
|
|
||||||
|
|
||||||
/* Disable the port. */
|
|
||||||
Ser2UTCR3 = 0;
|
|
||||||
Ser2HSCR0 = 0;
|
|
||||||
|
|
||||||
if (si->pdata->shutdown)
|
|
||||||
si->pdata->shutdown(si->dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
/*
|
|
||||||
* Suspend the IrDA interface.
|
|
||||||
*/
|
|
||||||
static int sa1100_irda_suspend(struct platform_device *pdev, pm_message_t state)
|
|
||||||
{
|
|
||||||
struct net_device *dev = platform_get_drvdata(pdev);
|
|
||||||
struct sa1100_irda *si;
|
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
si = netdev_priv(dev);
|
|
||||||
if (si->open) {
|
|
||||||
/*
|
|
||||||
* Stop the transmit queue
|
|
||||||
*/
|
|
||||||
netif_device_detach(dev);
|
|
||||||
disable_irq(dev->irq);
|
|
||||||
sa1100_irda_shutdown(si);
|
|
||||||
__sa1100_irda_set_power(si, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Resume the IrDA interface.
|
|
||||||
*/
|
|
||||||
static int sa1100_irda_resume(struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
struct net_device *dev = platform_get_drvdata(pdev);
|
|
||||||
struct sa1100_irda *si;
|
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
si = netdev_priv(dev);
|
|
||||||
if (si->open) {
|
|
||||||
/*
|
|
||||||
* If we missed a speed change, initialise at the new speed
|
|
||||||
* directly. It is debatable whether this is actually
|
|
||||||
* required, but in the interests of continuing from where
|
|
||||||
* we left off it is desirable. The converse argument is
|
|
||||||
* that we should re-negotiate at 9600 baud again.
|
|
||||||
*/
|
|
||||||
if (si->newspeed) {
|
|
||||||
si->speed = si->newspeed;
|
|
||||||
si->newspeed = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sa1100_irda_startup(si);
|
|
||||||
__sa1100_irda_set_power(si, si->power);
|
|
||||||
enable_irq(dev->irq);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This automatically wakes up the queue
|
|
||||||
*/
|
|
||||||
netif_device_attach(dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#define sa1100_irda_suspend NULL
|
|
||||||
#define sa1100_irda_resume NULL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* HP-SIR format interrupt service routines.
|
* HP-SIR format interrupt service routines.
|
||||||
*/
|
*/
|
||||||
@ -774,6 +643,69 @@ sa1100_irda_ioctl(struct net_device *dev, struct ifreq *ifreq, int cmd)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int sa1100_irda_startup(struct sa1100_irda *si)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ensure that the ports for this device are setup correctly.
|
||||||
|
*/
|
||||||
|
if (si->pdata->startup) {
|
||||||
|
ret = si->pdata->startup(si->dev);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configure PPC for IRDA - we want to drive TXD2 low.
|
||||||
|
* We also want to drive this pin low during sleep.
|
||||||
|
*/
|
||||||
|
PPSR &= ~PPC_TXD2;
|
||||||
|
PSDR &= ~PPC_TXD2;
|
||||||
|
PPDR |= PPC_TXD2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enable HP-SIR modulation, and ensure that the port is disabled.
|
||||||
|
*/
|
||||||
|
Ser2UTCR3 = 0;
|
||||||
|
Ser2HSCR0 = HSCR0_UART;
|
||||||
|
Ser2UTCR4 = si->utcr4;
|
||||||
|
Ser2UTCR0 = UTCR0_8BitData;
|
||||||
|
Ser2HSCR2 = HSCR2_TrDataH | HSCR2_RcDataL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clear status register
|
||||||
|
*/
|
||||||
|
Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID;
|
||||||
|
|
||||||
|
ret = sa1100_irda_set_speed(si, si->speed = 9600);
|
||||||
|
if (ret) {
|
||||||
|
Ser2UTCR3 = 0;
|
||||||
|
Ser2HSCR0 = 0;
|
||||||
|
|
||||||
|
if (si->pdata->shutdown)
|
||||||
|
si->pdata->shutdown(si->dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sa1100_irda_shutdown(struct sa1100_irda *si)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Stop all DMA activity.
|
||||||
|
*/
|
||||||
|
sa1100_stop_dma(si->dma_rx.regs);
|
||||||
|
sa1100_stop_dma(si->dma_tx.regs);
|
||||||
|
|
||||||
|
/* Disable the port. */
|
||||||
|
Ser2UTCR3 = 0;
|
||||||
|
Ser2HSCR0 = 0;
|
||||||
|
|
||||||
|
if (si->pdata->shutdown)
|
||||||
|
si->pdata->shutdown(si->dev);
|
||||||
|
}
|
||||||
|
|
||||||
static int sa1100_irda_start(struct net_device *dev)
|
static int sa1100_irda_start(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct sa1100_irda *si = netdev_priv(dev);
|
struct sa1100_irda *si = netdev_priv(dev);
|
||||||
@ -1024,6 +956,74 @@ static int sa1100_irda_remove(struct platform_device *pdev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
/*
|
||||||
|
* Suspend the IrDA interface.
|
||||||
|
*/
|
||||||
|
static int sa1100_irda_suspend(struct platform_device *pdev, pm_message_t state)
|
||||||
|
{
|
||||||
|
struct net_device *dev = platform_get_drvdata(pdev);
|
||||||
|
struct sa1100_irda *si;
|
||||||
|
|
||||||
|
if (!dev)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
si = netdev_priv(dev);
|
||||||
|
if (si->open) {
|
||||||
|
/*
|
||||||
|
* Stop the transmit queue
|
||||||
|
*/
|
||||||
|
netif_device_detach(dev);
|
||||||
|
disable_irq(dev->irq);
|
||||||
|
sa1100_irda_shutdown(si);
|
||||||
|
__sa1100_irda_set_power(si, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Resume the IrDA interface.
|
||||||
|
*/
|
||||||
|
static int sa1100_irda_resume(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
struct net_device *dev = platform_get_drvdata(pdev);
|
||||||
|
struct sa1100_irda *si;
|
||||||
|
|
||||||
|
if (!dev)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
si = netdev_priv(dev);
|
||||||
|
if (si->open) {
|
||||||
|
/*
|
||||||
|
* If we missed a speed change, initialise at the new speed
|
||||||
|
* directly. It is debatable whether this is actually
|
||||||
|
* required, but in the interests of continuing from where
|
||||||
|
* we left off it is desirable. The converse argument is
|
||||||
|
* that we should re-negotiate at 9600 baud again.
|
||||||
|
*/
|
||||||
|
if (si->newspeed) {
|
||||||
|
si->speed = si->newspeed;
|
||||||
|
si->newspeed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sa1100_irda_startup(si);
|
||||||
|
__sa1100_irda_set_power(si, si->power);
|
||||||
|
enable_irq(dev->irq);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This automatically wakes up the queue
|
||||||
|
*/
|
||||||
|
netif_device_attach(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define sa1100_irda_suspend NULL
|
||||||
|
#define sa1100_irda_resume NULL
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct platform_driver sa1100ir_driver = {
|
static struct platform_driver sa1100ir_driver = {
|
||||||
.probe = sa1100_irda_probe,
|
.probe = sa1100_irda_probe,
|
||||||
.remove = sa1100_irda_remove,
|
.remove = sa1100_irda_remove,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user