aboutsummaryrefslogtreecommitdiffstats
path: root/sound/isa
diff options
context:
space:
mode:
Diffstat (limited to 'sound/isa')
-rw-r--r--sound/isa/es18xx.c71
1 files changed, 25 insertions, 46 deletions
diff --git a/sound/isa/es18xx.c b/sound/isa/es18xx.c
index 160752bc2e8e..5cf42b4d65fd 100644
--- a/sound/isa/es18xx.c
+++ b/sound/isa/es18xx.c
@@ -139,10 +139,6 @@ struct snd_es18xx {
139#ifdef CONFIG_PM 139#ifdef CONFIG_PM
140 unsigned char pm_reg; 140 unsigned char pm_reg;
141#endif 141#endif
142};
143
144struct snd_audiodrive {
145 struct snd_es18xx *chip;
146#ifdef CONFIG_PNP 142#ifdef CONFIG_PNP
147 struct pnp_dev *dev; 143 struct pnp_dev *dev;
148 struct pnp_dev *devc; 144 struct pnp_dev *devc;
@@ -755,8 +751,7 @@ static int snd_es18xx_playback_trigger(struct snd_pcm_substream *substream,
755static irqreturn_t snd_es18xx_interrupt(int irq, void *dev_id) 751static irqreturn_t snd_es18xx_interrupt(int irq, void *dev_id)
756{ 752{
757 struct snd_card *card = dev_id; 753 struct snd_card *card = dev_id;
758 struct snd_audiodrive *acard = card->private_data; 754 struct snd_es18xx *chip = card->private_data;
759 struct snd_es18xx *chip = acard->chip;
760 unsigned char status; 755 unsigned char status;
761 756
762 if (chip->caps & ES18XX_CONTROL) { 757 if (chip->caps & ES18XX_CONTROL) {
@@ -1699,8 +1694,7 @@ static struct snd_pcm_ops snd_es18xx_capture_ops = {
1699static int __devinit snd_es18xx_pcm(struct snd_card *card, int device, 1694static int __devinit snd_es18xx_pcm(struct snd_card *card, int device,
1700 struct snd_pcm **rpcm) 1695 struct snd_pcm **rpcm)
1701{ 1696{
1702 struct snd_audiodrive *acard = card->private_data; 1697 struct snd_es18xx *chip = card->private_data;
1703 struct snd_es18xx *chip = acard->chip;
1704 struct snd_pcm *pcm; 1698 struct snd_pcm *pcm;
1705 char str[16]; 1699 char str[16];
1706 int err; 1700 int err;
@@ -1742,8 +1736,7 @@ static int __devinit snd_es18xx_pcm(struct snd_card *card, int device,
1742#ifdef CONFIG_PM 1736#ifdef CONFIG_PM
1743static int snd_es18xx_suspend(struct snd_card *card, pm_message_t state) 1737static int snd_es18xx_suspend(struct snd_card *card, pm_message_t state)
1744{ 1738{
1745 struct snd_audiodrive *acard = card->private_data; 1739 struct snd_es18xx *chip = card->private_data;
1746 struct snd_es18xx *chip = acard->chip;
1747 1740
1748 snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); 1741 snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
1749 1742
@@ -1760,8 +1753,7 @@ static int snd_es18xx_suspend(struct snd_card *card, pm_message_t state)
1760 1753
1761static int snd_es18xx_resume(struct snd_card *card) 1754static int snd_es18xx_resume(struct snd_card *card)
1762{ 1755{
1763 struct snd_audiodrive *acard = card->private_data; 1756 struct snd_es18xx *chip = card->private_data;
1764 struct snd_es18xx *chip = acard->chip;
1765 1757
1766 /* restore PM register, we won't wake till (not 0x07) i/o activity though */ 1758 /* restore PM register, we won't wake till (not 0x07) i/o activity though */
1767 snd_es18xx_write(chip, ES18XX_PM, chip->pm_reg ^= ES18XX_PM_FM); 1759 snd_es18xx_write(chip, ES18XX_PM, chip->pm_reg ^= ES18XX_PM_FM);
@@ -1773,8 +1765,7 @@ static int snd_es18xx_resume(struct snd_card *card)
1773 1765
1774static int snd_es18xx_free(struct snd_card *card) 1766static int snd_es18xx_free(struct snd_card *card)
1775{ 1767{
1776 struct snd_audiodrive *acard = card->private_data; 1768 struct snd_es18xx *chip = card->private_data;
1777 struct snd_es18xx *chip = acard->chip;
1778 1769
1779 release_and_free_resource(chip->res_port); 1770 release_and_free_resource(chip->res_port);
1780 release_and_free_resource(chip->res_ctrl_port); 1771 release_and_free_resource(chip->res_ctrl_port);
@@ -1789,7 +1780,6 @@ static int snd_es18xx_free(struct snd_card *card)
1789 disable_dma(chip->dma2); 1780 disable_dma(chip->dma2);
1790 free_dma(chip->dma2); 1781 free_dma(chip->dma2);
1791 } 1782 }
1792 kfree(chip);
1793 return 0; 1783 return 0;
1794} 1784}
1795 1785
@@ -1802,19 +1792,14 @@ static int __devinit snd_es18xx_new_device(struct snd_card *card,
1802 unsigned long port, 1792 unsigned long port,
1803 unsigned long mpu_port, 1793 unsigned long mpu_port,
1804 unsigned long fm_port, 1794 unsigned long fm_port,
1805 int irq, int dma1, int dma2, 1795 int irq, int dma1, int dma2)
1806 struct snd_es18xx ** rchip)
1807{ 1796{
1808 struct snd_es18xx *chip; 1797 struct snd_es18xx *chip = card->private_data;
1809 static struct snd_device_ops ops = { 1798 static struct snd_device_ops ops = {
1810 .dev_free = snd_es18xx_dev_free, 1799 .dev_free = snd_es18xx_dev_free,
1811 }; 1800 };
1812 int err; 1801 int err;
1813 1802
1814 *rchip = NULL;
1815 chip = kzalloc(sizeof(*chip), GFP_KERNEL);
1816 if (chip == NULL)
1817 return -ENOMEM;
1818 spin_lock_init(&chip->reg_lock); 1803 spin_lock_init(&chip->reg_lock);
1819 spin_lock_init(&chip->mixer_lock); 1804 spin_lock_init(&chip->mixer_lock);
1820 spin_lock_init(&chip->ctrl_lock); 1805 spin_lock_init(&chip->ctrl_lock);
@@ -1865,14 +1850,12 @@ static int __devinit snd_es18xx_new_device(struct snd_card *card,
1865 snd_es18xx_free(card); 1850 snd_es18xx_free(card);
1866 return err; 1851 return err;
1867 } 1852 }
1868 *rchip = chip;
1869 return 0; 1853 return 0;
1870} 1854}
1871 1855
1872static int __devinit snd_es18xx_mixer(struct snd_card *card) 1856static int __devinit snd_es18xx_mixer(struct snd_card *card)
1873{ 1857{
1874 struct snd_audiodrive *acard = card->private_data; 1858 struct snd_es18xx *chip = card->private_data;
1875 struct snd_es18xx *chip = acard->chip;
1876 int err; 1859 int err;
1877 unsigned int idx; 1860 unsigned int idx;
1878 1861
@@ -2074,11 +2057,11 @@ static int __devinit snd_audiodrive_pnp_init_main(int dev, struct pnp_dev *pdev)
2074 return 0; 2057 return 0;
2075} 2058}
2076 2059
2077static int __devinit snd_audiodrive_pnp(int dev, struct snd_audiodrive *acard, 2060static int __devinit snd_audiodrive_pnp(int dev, struct snd_es18xx *chip,
2078 struct pnp_dev *pdev) 2061 struct pnp_dev *pdev)
2079{ 2062{
2080 acard->dev = pdev; 2063 chip->dev = pdev;
2081 if (snd_audiodrive_pnp_init_main(dev, acard->dev) < 0) 2064 if (snd_audiodrive_pnp_init_main(dev, chip->dev) < 0)
2082 return -EBUSY; 2065 return -EBUSY;
2083 return 0; 2066 return 0;
2084} 2067}
@@ -2104,26 +2087,26 @@ static struct pnp_card_device_id snd_audiodrive_pnpids[] = {
2104 2087
2105MODULE_DEVICE_TABLE(pnp_card, snd_audiodrive_pnpids); 2088MODULE_DEVICE_TABLE(pnp_card, snd_audiodrive_pnpids);
2106 2089
2107static int __devinit snd_audiodrive_pnpc(int dev, struct snd_audiodrive *acard, 2090static int __devinit snd_audiodrive_pnpc(int dev, struct snd_es18xx *chip,
2108 struct pnp_card_link *card, 2091 struct pnp_card_link *card,
2109 const struct pnp_card_device_id *id) 2092 const struct pnp_card_device_id *id)
2110{ 2093{
2111 acard->dev = pnp_request_card_device(card, id->devs[0].id, NULL); 2094 chip->dev = pnp_request_card_device(card, id->devs[0].id, NULL);
2112 if (acard->dev == NULL) 2095 if (chip->dev == NULL)
2113 return -EBUSY; 2096 return -EBUSY;
2114 2097
2115 acard->devc = pnp_request_card_device(card, id->devs[1].id, NULL); 2098 chip->devc = pnp_request_card_device(card, id->devs[1].id, NULL);
2116 if (acard->devc == NULL) 2099 if (chip->devc == NULL)
2117 return -EBUSY; 2100 return -EBUSY;
2118 2101
2119 /* Control port initialization */ 2102 /* Control port initialization */
2120 if (pnp_activate_dev(acard->devc) < 0) { 2103 if (pnp_activate_dev(chip->devc) < 0) {
2121 snd_printk(KERN_ERR PFX "PnP control configure failure (out of resources?)\n"); 2104 snd_printk(KERN_ERR PFX "PnP control configure failure (out of resources?)\n");
2122 return -EAGAIN; 2105 return -EAGAIN;
2123 } 2106 }
2124 snd_printdd("pnp: port=0x%llx\n", 2107 snd_printdd("pnp: port=0x%llx\n",
2125 (unsigned long long)pnp_port_start(acard->devc, 0)); 2108 (unsigned long long)pnp_port_start(chip->devc, 0));
2126 if (snd_audiodrive_pnp_init_main(dev, acard->dev) < 0) 2109 if (snd_audiodrive_pnp_init_main(dev, chip->dev) < 0)
2127 return -EBUSY; 2110 return -EBUSY;
2128 2111
2129 return 0; 2112 return 0;
@@ -2139,24 +2122,20 @@ static int __devinit snd_audiodrive_pnpc(int dev, struct snd_audiodrive *acard,
2139static int snd_es18xx_card_new(int dev, struct snd_card **cardp) 2122static int snd_es18xx_card_new(int dev, struct snd_card **cardp)
2140{ 2123{
2141 return snd_card_create(index[dev], id[dev], THIS_MODULE, 2124 return snd_card_create(index[dev], id[dev], THIS_MODULE,
2142 sizeof(struct snd_audiodrive), cardp); 2125 sizeof(struct snd_es18xx), cardp);
2143} 2126}
2144 2127
2145static int __devinit snd_audiodrive_probe(struct snd_card *card, int dev) 2128static int __devinit snd_audiodrive_probe(struct snd_card *card, int dev)
2146{ 2129{
2147 struct snd_audiodrive *acard = card->private_data; 2130 struct snd_es18xx *chip = card->private_data;
2148 struct snd_es18xx *chip;
2149 struct snd_opl3 *opl3; 2131 struct snd_opl3 *opl3;
2150 int err; 2132 int err;
2151 2133
2152 if ((err = snd_es18xx_new_device(card, 2134 err = snd_es18xx_new_device(card,
2153 port[dev], 2135 port[dev], mpu_port[dev], fm_port[dev],
2154 mpu_port[dev], 2136 irq[dev], dma1[dev], dma2[dev]);
2155 fm_port[dev], 2137 if (err < 0)
2156 irq[dev], dma1[dev], dma2[dev],
2157 &chip)) < 0)
2158 return err; 2138 return err;
2159 acard->chip = chip;
2160 2139
2161 sprintf(card->driver, "ES%x", chip->version); 2140 sprintf(card->driver, "ES%x", chip->version);
2162 2141