mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-03 17:14:14 +08:00
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;
|
||||
}
|
||||
|
||||
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.
|
||||
*/
|
||||
@ -774,6 +643,69 @@ sa1100_irda_ioctl(struct net_device *dev, struct ifreq *ifreq, int cmd)
|
||||
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)
|
||||
{
|
||||
struct sa1100_irda *si = netdev_priv(dev);
|
||||
@ -1024,6 +956,74 @@ static int sa1100_irda_remove(struct platform_device *pdev)
|
||||
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 = {
|
||||
.probe = sa1100_irda_probe,
|
||||
.remove = sa1100_irda_remove,
|
||||
|
Loading…
Reference in New Issue
Block a user