Loading drivers/staging/solo6x10/core.c +30 −30 Original line number Original line Diff line number Diff line Loading @@ -25,27 +25,27 @@ #include "solo6x10.h" #include "solo6x10.h" #include "tw28.h" #include "tw28.h" MODULE_DESCRIPTION("Softlogic 6010 MP4 Encoder/Decoder V4L2/ALSA Driver"); MODULE_DESCRIPTION("Softlogic 6x10 MP4/H.264 Encoder/Decoder V4L2/ALSA Driver"); MODULE_AUTHOR("Ben Collins <bcollins@bluecherry.net>"); MODULE_AUTHOR("Ben Collins <bcollins@bluecherry.net>"); MODULE_VERSION(SOLO6010_VERSION); MODULE_VERSION(SOLO6X10_VERSION); MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL"); void solo6010_irq_on(struct solo6010_dev *solo_dev, u32 mask) void solo_irq_on(struct solo_dev *solo_dev, u32 mask) { { solo_dev->irq_mask |= mask; solo_dev->irq_mask |= mask; solo_reg_write(solo_dev, SOLO_IRQ_ENABLE, solo_dev->irq_mask); solo_reg_write(solo_dev, SOLO_IRQ_ENABLE, solo_dev->irq_mask); } } void solo6010_irq_off(struct solo6010_dev *solo_dev, u32 mask) void solo_irq_off(struct solo_dev *solo_dev, u32 mask) { { solo_dev->irq_mask &= ~mask; solo_dev->irq_mask &= ~mask; solo_reg_write(solo_dev, SOLO_IRQ_ENABLE, solo_dev->irq_mask); solo_reg_write(solo_dev, SOLO_IRQ_ENABLE, solo_dev->irq_mask); } } /* XXX We should check the return value of the sub-device ISR's */ /* XXX We should check the return value of the sub-device ISR's */ static irqreturn_t solo6010_isr(int irq, void *data) static irqreturn_t solo_isr(int irq, void *data) { { struct solo6010_dev *solo_dev = data; struct solo_dev *solo_dev = data; u32 status; u32 status; int i; int i; Loading Loading @@ -88,7 +88,7 @@ static irqreturn_t solo6010_isr(int irq, void *data) return IRQ_HANDLED; return IRQ_HANDLED; } } static void free_solo_dev(struct solo6010_dev *solo_dev) static void free_solo_dev(struct solo_dev *solo_dev) { { struct pci_dev *pdev; struct pci_dev *pdev; Loading Loading @@ -116,7 +116,7 @@ static void free_solo_dev(struct solo6010_dev *solo_dev) /* Now cleanup the PCI device */ /* Now cleanup the PCI device */ if (solo_dev->reg_base) { if (solo_dev->reg_base) { solo6010_irq_off(solo_dev, ~0); solo_irq_off(solo_dev, ~0); pci_iounmap(pdev, solo_dev->reg_base); pci_iounmap(pdev, solo_dev->reg_base); free_irq(pdev->irq, solo_dev); free_irq(pdev->irq, solo_dev); } } Loading @@ -128,10 +128,10 @@ static void free_solo_dev(struct solo6010_dev *solo_dev) kfree(solo_dev); kfree(solo_dev); } } static int __devinit solo6010_pci_probe(struct pci_dev *pdev, static int __devinit solo_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) const struct pci_device_id *id) { { struct solo6010_dev *solo_dev; struct solo_dev *solo_dev; int ret; int ret; int sdram; int sdram; u8 chip_id; u8 chip_id; Loading @@ -151,7 +151,7 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev, pci_set_master(pdev); pci_set_master(pdev); ret = pci_request_regions(pdev, SOLO6010_NAME); ret = pci_request_regions(pdev, SOLO6X10_NAME); if (ret) if (ret) goto fail_probe; goto fail_probe; Loading Loading @@ -184,7 +184,7 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev, solo_dev->flags = id->driver_data; solo_dev->flags = id->driver_data; /* Disable all interrupts to start */ /* Disable all interrupts to start */ solo6010_irq_off(solo_dev, ~0); solo_irq_off(solo_dev, ~0); reg = SOLO_SYS_CFG_SDRAM64BIT; reg = SOLO_SYS_CFG_SDRAM64BIT; /* Initial global settings */ /* Initial global settings */ Loading Loading @@ -223,13 +223,13 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev, /* PLL locking time of 1ms */ /* PLL locking time of 1ms */ mdelay(1); mdelay(1); ret = request_irq(pdev->irq, solo6010_isr, IRQF_SHARED, SOLO6010_NAME, ret = request_irq(pdev->irq, solo_isr, IRQF_SHARED, SOLO6X10_NAME, solo_dev); solo_dev); if (ret) if (ret) goto fail_probe; goto fail_probe; /* Handle this from the start */ /* Handle this from the start */ solo6010_irq_on(solo_dev, SOLO_IRQ_PCI_ERR); solo_irq_on(solo_dev, SOLO_IRQ_PCI_ERR); ret = solo_i2c_init(solo_dev); ret = solo_i2c_init(solo_dev); if (ret) if (ret) Loading Loading @@ -283,14 +283,14 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev, return ret; return ret; } } static void __devexit solo6010_pci_remove(struct pci_dev *pdev) static void __devexit solo_pci_remove(struct pci_dev *pdev) { { struct solo6010_dev *solo_dev = pci_get_drvdata(pdev); struct solo_dev *solo_dev = pci_get_drvdata(pdev); free_solo_dev(solo_dev); free_solo_dev(solo_dev); } } static struct pci_device_id solo6010_id_table[] = { static struct pci_device_id solo_id_table[] = { /* 6010 based cards */ /* 6010 based cards */ {PCI_DEVICE(PCI_VENDOR_ID_SOFTLOGIC, PCI_DEVICE_ID_SOLO6010)}, {PCI_DEVICE(PCI_VENDOR_ID_SOFTLOGIC, PCI_DEVICE_ID_SOLO6010)}, {PCI_DEVICE(PCI_VENDOR_ID_SOFTLOGIC, PCI_DEVICE_ID_SOLO6110), {PCI_DEVICE(PCI_VENDOR_ID_SOFTLOGIC, PCI_DEVICE_ID_SOLO6110), Loading @@ -308,24 +308,24 @@ static struct pci_device_id solo6010_id_table[] = { {0,} {0,} }; }; MODULE_DEVICE_TABLE(pci, solo6010_id_table); MODULE_DEVICE_TABLE(pci, solo_id_table); static struct pci_driver solo6010_pci_driver = { static struct pci_driver solo_pci_driver = { .name = SOLO6010_NAME, .name = SOLO6X10_NAME, .id_table = solo6010_id_table, .id_table = solo_id_table, .probe = solo6010_pci_probe, .probe = solo_pci_probe, .remove = solo6010_pci_remove, .remove = solo_pci_remove, }; }; static int __init solo6010_module_init(void) static int __init solo_module_init(void) { { return pci_register_driver(&solo6010_pci_driver); return pci_register_driver(&solo_pci_driver); } } static void __exit solo6010_module_exit(void) static void __exit solo_module_exit(void) { { pci_unregister_driver(&solo6010_pci_driver); pci_unregister_driver(&solo_pci_driver); } } module_init(solo6010_module_init); module_init(solo_module_init); module_exit(solo6010_module_exit); module_exit(solo_module_exit); drivers/staging/solo6x10/disp.c +8 −8 Original line number Original line Diff line number Diff line Loading @@ -37,7 +37,7 @@ static unsigned video_type; module_param(video_type, uint, 0644); module_param(video_type, uint, 0644); MODULE_PARM_DESC(video_type, "video_type (0 = NTSC/Default, 1 = PAL)"); MODULE_PARM_DESC(video_type, "video_type (0 = NTSC/Default, 1 = PAL)"); static void solo_vin_config(struct solo6010_dev *solo_dev) static void solo_vin_config(struct solo_dev *solo_dev) { { solo_dev->vin_hstart = 8; solo_dev->vin_hstart = 8; solo_dev->vin_vstart = 2; solo_dev->vin_vstart = 2; Loading Loading @@ -97,7 +97,7 @@ static void solo_vin_config(struct solo6010_dev *solo_dev) SOLO_VI_PB_HSTOP(16 + 720)); SOLO_VI_PB_HSTOP(16 + 720)); } } static void solo_disp_config(struct solo6010_dev *solo_dev) static void solo_disp_config(struct solo_dev *solo_dev) { { solo_dev->vout_hstart = 6; solo_dev->vout_hstart = 6; solo_dev->vout_vstart = 8; solo_dev->vout_vstart = 8; Loading Loading @@ -145,7 +145,7 @@ static void solo_disp_config(struct solo6010_dev *solo_dev) solo_reg_write(solo_dev, SOLO_WATCHDOG, 0); solo_reg_write(solo_dev, SOLO_WATCHDOG, 0); } } static int solo_dma_vin_region(struct solo6010_dev *solo_dev, u32 off, static int solo_dma_vin_region(struct solo_dev *solo_dev, u32 off, u16 val, int reg_size) u16 val, int reg_size) { { u16 buf[64]; u16 buf[64]; Loading @@ -163,7 +163,7 @@ static int solo_dma_vin_region(struct solo6010_dev *solo_dev, u32 off, return ret; return ret; } } void solo_set_motion_threshold(struct solo6010_dev *solo_dev, u8 ch, u16 val) void solo_set_motion_threshold(struct solo_dev *solo_dev, u8 ch, u16 val) { { if (ch > solo_dev->nr_chans) if (ch > solo_dev->nr_chans) return; return; Loading @@ -177,7 +177,7 @@ void solo_set_motion_threshold(struct solo6010_dev *solo_dev, u8 ch, u16 val) * threshold and working table for each channel. Atleast that's what the * threshold and working table for each channel. Atleast that's what the * spec says. However, this code (take from rdk) has some mystery 8k * spec says. However, this code (take from rdk) has some mystery 8k * block right after the flag area, before the first thresh table. */ * block right after the flag area, before the first thresh table. */ static void solo_motion_config(struct solo6010_dev *solo_dev) static void solo_motion_config(struct solo_dev *solo_dev) { { int i; int i; Loading Loading @@ -209,7 +209,7 @@ static void solo_motion_config(struct solo6010_dev *solo_dev) solo_reg_write(solo_dev, SOLO_VI_MOTION_BAR, 0); solo_reg_write(solo_dev, SOLO_VI_MOTION_BAR, 0); } } int solo_disp_init(struct solo6010_dev *solo_dev) int solo_disp_init(struct solo_dev *solo_dev) { { int i; int i; Loading @@ -234,11 +234,11 @@ int solo_disp_init(struct solo6010_dev *solo_dev) return 0; return 0; } } void solo_disp_exit(struct solo6010_dev *solo_dev) void solo_disp_exit(struct solo_dev *solo_dev) { { int i; int i; solo6010_irq_off(solo_dev, SOLO_IRQ_MOTION); solo_irq_off(solo_dev, SOLO_IRQ_MOTION); solo_reg_write(solo_dev, SOLO_VO_DISP_CTRL, 0); solo_reg_write(solo_dev, SOLO_VO_DISP_CTRL, 0); solo_reg_write(solo_dev, SOLO_VO_ZOOM_CTRL, 0); solo_reg_write(solo_dev, SOLO_VO_ZOOM_CTRL, 0); Loading drivers/staging/solo6x10/enc.c +8 −8 Original line number Original line Diff line number Diff line Loading @@ -27,7 +27,7 @@ #define VI_PROG_HSIZE (1280 - 16) #define VI_PROG_HSIZE (1280 - 16) #define VI_PROG_VSIZE (1024 - 16) #define VI_PROG_VSIZE (1024 - 16) static void solo_capture_config(struct solo6010_dev *solo_dev) static void solo_capture_config(struct solo_dev *solo_dev) { { int i, j; int i, j; unsigned long height; unsigned long height; Loading Loading @@ -115,7 +115,7 @@ static void solo_capture_config(struct solo6010_dev *solo_dev) int solo_osd_print(struct solo_enc_dev *solo_enc) int solo_osd_print(struct solo_enc_dev *solo_enc) { { struct solo6010_dev *solo_dev = solo_enc->solo_dev; struct solo_dev *solo_dev = solo_enc->solo_dev; char *str = solo_enc->osd_text; char *str = solo_enc->osd_text; u8 *buf; u8 *buf; u32 reg = solo_reg_read(solo_dev, SOLO_VE_OSD_CH); u32 reg = solo_reg_read(solo_dev, SOLO_VE_OSD_CH); Loading Loading @@ -151,7 +151,7 @@ int solo_osd_print(struct solo_enc_dev *solo_enc) return 0; return 0; } } static void solo_jpeg_config(struct solo6010_dev *solo_dev) static void solo_jpeg_config(struct solo_dev *solo_dev) { { u32 reg; u32 reg; if (solo_dev->flags & FLAGS_6110) if (solo_dev->flags & FLAGS_6110) Loading @@ -169,7 +169,7 @@ static void solo_jpeg_config(struct solo6010_dev *solo_dev) solo_reg_write(solo_dev, 0x0688, (0 << 16) | (30 << 8) | 60); solo_reg_write(solo_dev, 0x0688, (0 << 16) | (30 << 8) | 60); } } static void solo_mp4e_config(struct solo6010_dev *solo_dev) static void solo_mp4e_config(struct solo_dev *solo_dev) { { int i; int i; u32 reg; u32 reg; Loading Loading @@ -206,7 +206,7 @@ static void solo_mp4e_config(struct solo6010_dev *solo_dev) solo_reg_write(solo_dev, 0x0634, 0x00040008); /* ? */ solo_reg_write(solo_dev, 0x0634, 0x00040008); /* ? */ } } int solo_enc_init(struct solo6010_dev *solo_dev) int solo_enc_init(struct solo_dev *solo_dev) { { int i; int i; Loading @@ -219,16 +219,16 @@ int solo_enc_init(struct solo6010_dev *solo_dev) solo_reg_write(solo_dev, SOLO_CAP_CH_COMP_ENA_E(i), 0); solo_reg_write(solo_dev, SOLO_CAP_CH_COMP_ENA_E(i), 0); } } solo6010_irq_on(solo_dev, SOLO_IRQ_ENCODER); solo_irq_on(solo_dev, SOLO_IRQ_ENCODER); return 0; return 0; } } void solo_enc_exit(struct solo6010_dev *solo_dev) void solo_enc_exit(struct solo_dev *solo_dev) { { int i; int i; solo6010_irq_off(solo_dev, SOLO_IRQ_ENCODER); solo_irq_off(solo_dev, SOLO_IRQ_ENCODER); for (i = 0; i < solo_dev->nr_chans; i++) { for (i = 0; i < solo_dev->nr_chans; i++) { solo_reg_write(solo_dev, SOLO_CAP_CH_SCALE(i), 0); solo_reg_write(solo_dev, SOLO_CAP_CH_SCALE(i), 0); Loading drivers/staging/solo6x10/g723.c +21 −21 Original line number Original line Diff line number Diff line Loading @@ -52,11 +52,11 @@ struct solo_snd_pcm { struct solo_snd_pcm { int on; int on; spinlock_t lock; spinlock_t lock; struct solo6010_dev *solo_dev; struct solo_dev *solo_dev; unsigned char g723_buf[G723_PERIOD_BYTES]; unsigned char g723_buf[G723_PERIOD_BYTES]; }; }; static void solo_g723_config(struct solo6010_dev *solo_dev) static void solo_g723_config(struct solo_dev *solo_dev) { { int clk_div; int clk_div; Loading @@ -76,7 +76,7 @@ static void solo_g723_config(struct solo6010_dev *solo_dev) SOLO_AUDIO_I2S_MULTI(3) | SOLO_AUDIO_MODE(OUTMODE_MASK)); SOLO_AUDIO_I2S_MULTI(3) | SOLO_AUDIO_MODE(OUTMODE_MASK)); } } void solo_g723_isr(struct solo6010_dev *solo_dev) void solo_g723_isr(struct solo_dev *solo_dev) { { struct snd_pcm_str *pstr = struct snd_pcm_str *pstr = &solo_dev->snd_pcm->streams[SNDRV_PCM_STREAM_CAPTURE]; &solo_dev->snd_pcm->streams[SNDRV_PCM_STREAM_CAPTURE]; Loading Loading @@ -133,7 +133,7 @@ static struct snd_pcm_hardware snd_solo_pcm_hw = { static int snd_solo_pcm_open(struct snd_pcm_substream *ss) static int snd_solo_pcm_open(struct snd_pcm_substream *ss) { { struct solo6010_dev *solo_dev = snd_pcm_substream_chip(ss); struct solo_dev *solo_dev = snd_pcm_substream_chip(ss); struct solo_snd_pcm *solo_pcm; struct solo_snd_pcm *solo_pcm; solo_pcm = kzalloc(sizeof(*solo_pcm), GFP_KERNEL); solo_pcm = kzalloc(sizeof(*solo_pcm), GFP_KERNEL); Loading Loading @@ -162,7 +162,7 @@ static int snd_solo_pcm_close(struct snd_pcm_substream *ss) static int snd_solo_pcm_trigger(struct snd_pcm_substream *ss, int cmd) static int snd_solo_pcm_trigger(struct snd_pcm_substream *ss, int cmd) { { struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); struct solo6010_dev *solo_dev = solo_pcm->solo_dev; struct solo_dev *solo_dev = solo_pcm->solo_dev; int ret = 0; int ret = 0; spin_lock(&solo_pcm->lock); spin_lock(&solo_pcm->lock); Loading @@ -172,7 +172,7 @@ static int snd_solo_pcm_trigger(struct snd_pcm_substream *ss, int cmd) if (solo_pcm->on == 0) { if (solo_pcm->on == 0) { /* If this is the first user, switch on interrupts */ /* If this is the first user, switch on interrupts */ if (atomic_inc_return(&solo_dev->snd_users) == 1) if (atomic_inc_return(&solo_dev->snd_users) == 1) solo6010_irq_on(solo_dev, SOLO_IRQ_G723); solo_irq_on(solo_dev, SOLO_IRQ_G723); solo_pcm->on = 1; solo_pcm->on = 1; } } break; break; Loading @@ -180,7 +180,7 @@ static int snd_solo_pcm_trigger(struct snd_pcm_substream *ss, int cmd) if (solo_pcm->on) { if (solo_pcm->on) { /* If this was our last user, switch them off */ /* If this was our last user, switch them off */ if (atomic_dec_return(&solo_dev->snd_users) == 0) if (atomic_dec_return(&solo_dev->snd_users) == 0) solo6010_irq_off(solo_dev, SOLO_IRQ_G723); solo_irq_off(solo_dev, SOLO_IRQ_G723); solo_pcm->on = 0; solo_pcm->on = 0; } } break; break; Loading @@ -201,7 +201,7 @@ static int snd_solo_pcm_prepare(struct snd_pcm_substream *ss) static snd_pcm_uframes_t snd_solo_pcm_pointer(struct snd_pcm_substream *ss) static snd_pcm_uframes_t snd_solo_pcm_pointer(struct snd_pcm_substream *ss) { { struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); struct solo6010_dev *solo_dev = solo_pcm->solo_dev; struct solo_dev *solo_dev = solo_pcm->solo_dev; snd_pcm_uframes_t idx = solo_reg_read(solo_dev, SOLO_AUDIO_STA) & 0x1f; snd_pcm_uframes_t idx = solo_reg_read(solo_dev, SOLO_AUDIO_STA) & 0x1f; return idx * G723_FRAMES_PER_PAGE; return idx * G723_FRAMES_PER_PAGE; Loading @@ -212,7 +212,7 @@ static int snd_solo_pcm_copy(struct snd_pcm_substream *ss, int channel, snd_pcm_uframes_t count) snd_pcm_uframes_t count) { { struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); struct solo6010_dev *solo_dev = solo_pcm->solo_dev; struct solo_dev *solo_dev = solo_pcm->solo_dev; int err, i; int err, i; for (i = 0; i < (count / G723_FRAMES_PER_PAGE); i++) { for (i = 0; i < (count / G723_FRAMES_PER_PAGE); i++) { Loading Loading @@ -264,7 +264,7 @@ static int snd_solo_capture_volume_info(struct snd_kcontrol *kcontrol, static int snd_solo_capture_volume_get(struct snd_kcontrol *kcontrol, static int snd_solo_capture_volume_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *value) struct snd_ctl_elem_value *value) { { struct solo6010_dev *solo_dev = snd_kcontrol_chip(kcontrol); struct solo_dev *solo_dev = snd_kcontrol_chip(kcontrol); u8 ch = value->id.numid - 1; u8 ch = value->id.numid - 1; value->value.integer.value[0] = tw28_get_audio_gain(solo_dev, ch); value->value.integer.value[0] = tw28_get_audio_gain(solo_dev, ch); Loading @@ -275,7 +275,7 @@ static int snd_solo_capture_volume_get(struct snd_kcontrol *kcontrol, static int snd_solo_capture_volume_put(struct snd_kcontrol *kcontrol, static int snd_solo_capture_volume_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *value) struct snd_ctl_elem_value *value) { { struct solo6010_dev *solo_dev = snd_kcontrol_chip(kcontrol); struct solo_dev *solo_dev = snd_kcontrol_chip(kcontrol); u8 ch = value->id.numid - 1; u8 ch = value->id.numid - 1; u8 old_val; u8 old_val; Loading @@ -296,7 +296,7 @@ static struct snd_kcontrol_new snd_solo_capture_volume = { .put = snd_solo_capture_volume_put, .put = snd_solo_capture_volume_put, }; }; static int solo_snd_pcm_init(struct solo6010_dev *solo_dev) static int solo_snd_pcm_init(struct solo_dev *solo_dev) { { struct snd_card *card = solo_dev->snd_card; struct snd_card *card = solo_dev->snd_card; struct snd_pcm *pcm; struct snd_pcm *pcm; Loading Loading @@ -332,7 +332,7 @@ static int solo_snd_pcm_init(struct solo6010_dev *solo_dev) return 0; return 0; } } int solo_g723_init(struct solo6010_dev *solo_dev) int solo_g723_init(struct solo_dev *solo_dev) { { static struct snd_device_ops ops = { NULL }; static struct snd_device_ops ops = { NULL }; struct snd_card *card; struct snd_card *card; Loading @@ -352,8 +352,8 @@ int solo_g723_init(struct solo6010_dev *solo_dev) card = solo_dev->snd_card; card = solo_dev->snd_card; strcpy(card->driver, SOLO6010_NAME); strcpy(card->driver, SOLO6X10_NAME); strcpy(card->shortname, "SOLO-6010 Audio"); strcpy(card->shortname, "SOLO-6x10 Audio"); sprintf(card->longname, "%s on %s IRQ %d", card->shortname, sprintf(card->longname, "%s on %s IRQ %d", card->shortname, pci_name(solo_dev->pdev), solo_dev->pdev->irq); pci_name(solo_dev->pdev), solo_dev->pdev->irq); snd_card_set_dev(card, &solo_dev->pdev->dev); snd_card_set_dev(card, &solo_dev->pdev->dev); Loading @@ -363,7 +363,7 @@ int solo_g723_init(struct solo6010_dev *solo_dev) goto snd_error; goto snd_error; /* Mixer controls */ /* Mixer controls */ strcpy(card->mixername, "SOLO-6010"); strcpy(card->mixername, "SOLO-6x10"); kctl = snd_solo_capture_volume; kctl = snd_solo_capture_volume; kctl.count = solo_dev->nr_chans; kctl.count = solo_dev->nr_chans; ret = snd_ctl_add(card, snd_ctl_new1(&kctl, solo_dev)); ret = snd_ctl_add(card, snd_ctl_new1(&kctl, solo_dev)); Loading @@ -389,10 +389,10 @@ int solo_g723_init(struct solo6010_dev *solo_dev) return ret; return ret; } } void solo_g723_exit(struct solo6010_dev *solo_dev) void solo_g723_exit(struct solo_dev *solo_dev) { { solo_reg_write(solo_dev, SOLO_AUDIO_CONTROL, 0); solo_reg_write(solo_dev, SOLO_AUDIO_CONTROL, 0); solo6010_irq_off(solo_dev, SOLO_IRQ_G723); solo_irq_off(solo_dev, SOLO_IRQ_G723); snd_card_free(solo_dev->snd_card); snd_card_free(solo_dev->snd_card); } } drivers/staging/solo6x10/gpio.c +6 −6 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,7 @@ #include <asm/uaccess.h> #include <asm/uaccess.h> #include "solo6x10.h" #include "solo6x10.h" static void solo_gpio_mode(struct solo6010_dev *solo_dev, static void solo_gpio_mode(struct solo_dev *solo_dev, unsigned int port_mask, unsigned int mode) unsigned int port_mask, unsigned int mode) { { int port; int port; Loading Loading @@ -57,19 +57,19 @@ static void solo_gpio_mode(struct solo6010_dev *solo_dev, solo_reg_write(solo_dev, SOLO_GPIO_CONFIG_1, ret); solo_reg_write(solo_dev, SOLO_GPIO_CONFIG_1, ret); } } static void solo_gpio_set(struct solo6010_dev *solo_dev, unsigned int value) static void solo_gpio_set(struct solo_dev *solo_dev, unsigned int value) { { solo_reg_write(solo_dev, SOLO_GPIO_DATA_OUT, solo_reg_write(solo_dev, SOLO_GPIO_DATA_OUT, solo_reg_read(solo_dev, SOLO_GPIO_DATA_OUT) | value); solo_reg_read(solo_dev, SOLO_GPIO_DATA_OUT) | value); } } static void solo_gpio_clear(struct solo6010_dev *solo_dev, unsigned int value) static void solo_gpio_clear(struct solo_dev *solo_dev, unsigned int value) { { solo_reg_write(solo_dev, SOLO_GPIO_DATA_OUT, solo_reg_write(solo_dev, SOLO_GPIO_DATA_OUT, solo_reg_read(solo_dev, SOLO_GPIO_DATA_OUT) & ~value); solo_reg_read(solo_dev, SOLO_GPIO_DATA_OUT) & ~value); } } static void solo_gpio_config(struct solo6010_dev *solo_dev) static void solo_gpio_config(struct solo_dev *solo_dev) { { /* Video reset */ /* Video reset */ solo_gpio_mode(solo_dev, 0x30, 1); solo_gpio_mode(solo_dev, 0x30, 1); Loading @@ -89,13 +89,13 @@ static void solo_gpio_config(struct solo6010_dev *solo_dev) solo_gpio_clear(solo_dev, 0xff00); solo_gpio_clear(solo_dev, 0xff00); } } int solo_gpio_init(struct solo6010_dev *solo_dev) int solo_gpio_init(struct solo_dev *solo_dev) { { solo_gpio_config(solo_dev); solo_gpio_config(solo_dev); return 0; return 0; } } void solo_gpio_exit(struct solo6010_dev *solo_dev) void solo_gpio_exit(struct solo_dev *solo_dev) { { solo_gpio_clear(solo_dev, 0x30); solo_gpio_clear(solo_dev, 0x30); solo_gpio_config(solo_dev); solo_gpio_config(solo_dev); Loading Loading
drivers/staging/solo6x10/core.c +30 −30 Original line number Original line Diff line number Diff line Loading @@ -25,27 +25,27 @@ #include "solo6x10.h" #include "solo6x10.h" #include "tw28.h" #include "tw28.h" MODULE_DESCRIPTION("Softlogic 6010 MP4 Encoder/Decoder V4L2/ALSA Driver"); MODULE_DESCRIPTION("Softlogic 6x10 MP4/H.264 Encoder/Decoder V4L2/ALSA Driver"); MODULE_AUTHOR("Ben Collins <bcollins@bluecherry.net>"); MODULE_AUTHOR("Ben Collins <bcollins@bluecherry.net>"); MODULE_VERSION(SOLO6010_VERSION); MODULE_VERSION(SOLO6X10_VERSION); MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL"); void solo6010_irq_on(struct solo6010_dev *solo_dev, u32 mask) void solo_irq_on(struct solo_dev *solo_dev, u32 mask) { { solo_dev->irq_mask |= mask; solo_dev->irq_mask |= mask; solo_reg_write(solo_dev, SOLO_IRQ_ENABLE, solo_dev->irq_mask); solo_reg_write(solo_dev, SOLO_IRQ_ENABLE, solo_dev->irq_mask); } } void solo6010_irq_off(struct solo6010_dev *solo_dev, u32 mask) void solo_irq_off(struct solo_dev *solo_dev, u32 mask) { { solo_dev->irq_mask &= ~mask; solo_dev->irq_mask &= ~mask; solo_reg_write(solo_dev, SOLO_IRQ_ENABLE, solo_dev->irq_mask); solo_reg_write(solo_dev, SOLO_IRQ_ENABLE, solo_dev->irq_mask); } } /* XXX We should check the return value of the sub-device ISR's */ /* XXX We should check the return value of the sub-device ISR's */ static irqreturn_t solo6010_isr(int irq, void *data) static irqreturn_t solo_isr(int irq, void *data) { { struct solo6010_dev *solo_dev = data; struct solo_dev *solo_dev = data; u32 status; u32 status; int i; int i; Loading Loading @@ -88,7 +88,7 @@ static irqreturn_t solo6010_isr(int irq, void *data) return IRQ_HANDLED; return IRQ_HANDLED; } } static void free_solo_dev(struct solo6010_dev *solo_dev) static void free_solo_dev(struct solo_dev *solo_dev) { { struct pci_dev *pdev; struct pci_dev *pdev; Loading Loading @@ -116,7 +116,7 @@ static void free_solo_dev(struct solo6010_dev *solo_dev) /* Now cleanup the PCI device */ /* Now cleanup the PCI device */ if (solo_dev->reg_base) { if (solo_dev->reg_base) { solo6010_irq_off(solo_dev, ~0); solo_irq_off(solo_dev, ~0); pci_iounmap(pdev, solo_dev->reg_base); pci_iounmap(pdev, solo_dev->reg_base); free_irq(pdev->irq, solo_dev); free_irq(pdev->irq, solo_dev); } } Loading @@ -128,10 +128,10 @@ static void free_solo_dev(struct solo6010_dev *solo_dev) kfree(solo_dev); kfree(solo_dev); } } static int __devinit solo6010_pci_probe(struct pci_dev *pdev, static int __devinit solo_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) const struct pci_device_id *id) { { struct solo6010_dev *solo_dev; struct solo_dev *solo_dev; int ret; int ret; int sdram; int sdram; u8 chip_id; u8 chip_id; Loading @@ -151,7 +151,7 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev, pci_set_master(pdev); pci_set_master(pdev); ret = pci_request_regions(pdev, SOLO6010_NAME); ret = pci_request_regions(pdev, SOLO6X10_NAME); if (ret) if (ret) goto fail_probe; goto fail_probe; Loading Loading @@ -184,7 +184,7 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev, solo_dev->flags = id->driver_data; solo_dev->flags = id->driver_data; /* Disable all interrupts to start */ /* Disable all interrupts to start */ solo6010_irq_off(solo_dev, ~0); solo_irq_off(solo_dev, ~0); reg = SOLO_SYS_CFG_SDRAM64BIT; reg = SOLO_SYS_CFG_SDRAM64BIT; /* Initial global settings */ /* Initial global settings */ Loading Loading @@ -223,13 +223,13 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev, /* PLL locking time of 1ms */ /* PLL locking time of 1ms */ mdelay(1); mdelay(1); ret = request_irq(pdev->irq, solo6010_isr, IRQF_SHARED, SOLO6010_NAME, ret = request_irq(pdev->irq, solo_isr, IRQF_SHARED, SOLO6X10_NAME, solo_dev); solo_dev); if (ret) if (ret) goto fail_probe; goto fail_probe; /* Handle this from the start */ /* Handle this from the start */ solo6010_irq_on(solo_dev, SOLO_IRQ_PCI_ERR); solo_irq_on(solo_dev, SOLO_IRQ_PCI_ERR); ret = solo_i2c_init(solo_dev); ret = solo_i2c_init(solo_dev); if (ret) if (ret) Loading Loading @@ -283,14 +283,14 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev, return ret; return ret; } } static void __devexit solo6010_pci_remove(struct pci_dev *pdev) static void __devexit solo_pci_remove(struct pci_dev *pdev) { { struct solo6010_dev *solo_dev = pci_get_drvdata(pdev); struct solo_dev *solo_dev = pci_get_drvdata(pdev); free_solo_dev(solo_dev); free_solo_dev(solo_dev); } } static struct pci_device_id solo6010_id_table[] = { static struct pci_device_id solo_id_table[] = { /* 6010 based cards */ /* 6010 based cards */ {PCI_DEVICE(PCI_VENDOR_ID_SOFTLOGIC, PCI_DEVICE_ID_SOLO6010)}, {PCI_DEVICE(PCI_VENDOR_ID_SOFTLOGIC, PCI_DEVICE_ID_SOLO6010)}, {PCI_DEVICE(PCI_VENDOR_ID_SOFTLOGIC, PCI_DEVICE_ID_SOLO6110), {PCI_DEVICE(PCI_VENDOR_ID_SOFTLOGIC, PCI_DEVICE_ID_SOLO6110), Loading @@ -308,24 +308,24 @@ static struct pci_device_id solo6010_id_table[] = { {0,} {0,} }; }; MODULE_DEVICE_TABLE(pci, solo6010_id_table); MODULE_DEVICE_TABLE(pci, solo_id_table); static struct pci_driver solo6010_pci_driver = { static struct pci_driver solo_pci_driver = { .name = SOLO6010_NAME, .name = SOLO6X10_NAME, .id_table = solo6010_id_table, .id_table = solo_id_table, .probe = solo6010_pci_probe, .probe = solo_pci_probe, .remove = solo6010_pci_remove, .remove = solo_pci_remove, }; }; static int __init solo6010_module_init(void) static int __init solo_module_init(void) { { return pci_register_driver(&solo6010_pci_driver); return pci_register_driver(&solo_pci_driver); } } static void __exit solo6010_module_exit(void) static void __exit solo_module_exit(void) { { pci_unregister_driver(&solo6010_pci_driver); pci_unregister_driver(&solo_pci_driver); } } module_init(solo6010_module_init); module_init(solo_module_init); module_exit(solo6010_module_exit); module_exit(solo_module_exit);
drivers/staging/solo6x10/disp.c +8 −8 Original line number Original line Diff line number Diff line Loading @@ -37,7 +37,7 @@ static unsigned video_type; module_param(video_type, uint, 0644); module_param(video_type, uint, 0644); MODULE_PARM_DESC(video_type, "video_type (0 = NTSC/Default, 1 = PAL)"); MODULE_PARM_DESC(video_type, "video_type (0 = NTSC/Default, 1 = PAL)"); static void solo_vin_config(struct solo6010_dev *solo_dev) static void solo_vin_config(struct solo_dev *solo_dev) { { solo_dev->vin_hstart = 8; solo_dev->vin_hstart = 8; solo_dev->vin_vstart = 2; solo_dev->vin_vstart = 2; Loading Loading @@ -97,7 +97,7 @@ static void solo_vin_config(struct solo6010_dev *solo_dev) SOLO_VI_PB_HSTOP(16 + 720)); SOLO_VI_PB_HSTOP(16 + 720)); } } static void solo_disp_config(struct solo6010_dev *solo_dev) static void solo_disp_config(struct solo_dev *solo_dev) { { solo_dev->vout_hstart = 6; solo_dev->vout_hstart = 6; solo_dev->vout_vstart = 8; solo_dev->vout_vstart = 8; Loading Loading @@ -145,7 +145,7 @@ static void solo_disp_config(struct solo6010_dev *solo_dev) solo_reg_write(solo_dev, SOLO_WATCHDOG, 0); solo_reg_write(solo_dev, SOLO_WATCHDOG, 0); } } static int solo_dma_vin_region(struct solo6010_dev *solo_dev, u32 off, static int solo_dma_vin_region(struct solo_dev *solo_dev, u32 off, u16 val, int reg_size) u16 val, int reg_size) { { u16 buf[64]; u16 buf[64]; Loading @@ -163,7 +163,7 @@ static int solo_dma_vin_region(struct solo6010_dev *solo_dev, u32 off, return ret; return ret; } } void solo_set_motion_threshold(struct solo6010_dev *solo_dev, u8 ch, u16 val) void solo_set_motion_threshold(struct solo_dev *solo_dev, u8 ch, u16 val) { { if (ch > solo_dev->nr_chans) if (ch > solo_dev->nr_chans) return; return; Loading @@ -177,7 +177,7 @@ void solo_set_motion_threshold(struct solo6010_dev *solo_dev, u8 ch, u16 val) * threshold and working table for each channel. Atleast that's what the * threshold and working table for each channel. Atleast that's what the * spec says. However, this code (take from rdk) has some mystery 8k * spec says. However, this code (take from rdk) has some mystery 8k * block right after the flag area, before the first thresh table. */ * block right after the flag area, before the first thresh table. */ static void solo_motion_config(struct solo6010_dev *solo_dev) static void solo_motion_config(struct solo_dev *solo_dev) { { int i; int i; Loading Loading @@ -209,7 +209,7 @@ static void solo_motion_config(struct solo6010_dev *solo_dev) solo_reg_write(solo_dev, SOLO_VI_MOTION_BAR, 0); solo_reg_write(solo_dev, SOLO_VI_MOTION_BAR, 0); } } int solo_disp_init(struct solo6010_dev *solo_dev) int solo_disp_init(struct solo_dev *solo_dev) { { int i; int i; Loading @@ -234,11 +234,11 @@ int solo_disp_init(struct solo6010_dev *solo_dev) return 0; return 0; } } void solo_disp_exit(struct solo6010_dev *solo_dev) void solo_disp_exit(struct solo_dev *solo_dev) { { int i; int i; solo6010_irq_off(solo_dev, SOLO_IRQ_MOTION); solo_irq_off(solo_dev, SOLO_IRQ_MOTION); solo_reg_write(solo_dev, SOLO_VO_DISP_CTRL, 0); solo_reg_write(solo_dev, SOLO_VO_DISP_CTRL, 0); solo_reg_write(solo_dev, SOLO_VO_ZOOM_CTRL, 0); solo_reg_write(solo_dev, SOLO_VO_ZOOM_CTRL, 0); Loading
drivers/staging/solo6x10/enc.c +8 −8 Original line number Original line Diff line number Diff line Loading @@ -27,7 +27,7 @@ #define VI_PROG_HSIZE (1280 - 16) #define VI_PROG_HSIZE (1280 - 16) #define VI_PROG_VSIZE (1024 - 16) #define VI_PROG_VSIZE (1024 - 16) static void solo_capture_config(struct solo6010_dev *solo_dev) static void solo_capture_config(struct solo_dev *solo_dev) { { int i, j; int i, j; unsigned long height; unsigned long height; Loading Loading @@ -115,7 +115,7 @@ static void solo_capture_config(struct solo6010_dev *solo_dev) int solo_osd_print(struct solo_enc_dev *solo_enc) int solo_osd_print(struct solo_enc_dev *solo_enc) { { struct solo6010_dev *solo_dev = solo_enc->solo_dev; struct solo_dev *solo_dev = solo_enc->solo_dev; char *str = solo_enc->osd_text; char *str = solo_enc->osd_text; u8 *buf; u8 *buf; u32 reg = solo_reg_read(solo_dev, SOLO_VE_OSD_CH); u32 reg = solo_reg_read(solo_dev, SOLO_VE_OSD_CH); Loading Loading @@ -151,7 +151,7 @@ int solo_osd_print(struct solo_enc_dev *solo_enc) return 0; return 0; } } static void solo_jpeg_config(struct solo6010_dev *solo_dev) static void solo_jpeg_config(struct solo_dev *solo_dev) { { u32 reg; u32 reg; if (solo_dev->flags & FLAGS_6110) if (solo_dev->flags & FLAGS_6110) Loading @@ -169,7 +169,7 @@ static void solo_jpeg_config(struct solo6010_dev *solo_dev) solo_reg_write(solo_dev, 0x0688, (0 << 16) | (30 << 8) | 60); solo_reg_write(solo_dev, 0x0688, (0 << 16) | (30 << 8) | 60); } } static void solo_mp4e_config(struct solo6010_dev *solo_dev) static void solo_mp4e_config(struct solo_dev *solo_dev) { { int i; int i; u32 reg; u32 reg; Loading Loading @@ -206,7 +206,7 @@ static void solo_mp4e_config(struct solo6010_dev *solo_dev) solo_reg_write(solo_dev, 0x0634, 0x00040008); /* ? */ solo_reg_write(solo_dev, 0x0634, 0x00040008); /* ? */ } } int solo_enc_init(struct solo6010_dev *solo_dev) int solo_enc_init(struct solo_dev *solo_dev) { { int i; int i; Loading @@ -219,16 +219,16 @@ int solo_enc_init(struct solo6010_dev *solo_dev) solo_reg_write(solo_dev, SOLO_CAP_CH_COMP_ENA_E(i), 0); solo_reg_write(solo_dev, SOLO_CAP_CH_COMP_ENA_E(i), 0); } } solo6010_irq_on(solo_dev, SOLO_IRQ_ENCODER); solo_irq_on(solo_dev, SOLO_IRQ_ENCODER); return 0; return 0; } } void solo_enc_exit(struct solo6010_dev *solo_dev) void solo_enc_exit(struct solo_dev *solo_dev) { { int i; int i; solo6010_irq_off(solo_dev, SOLO_IRQ_ENCODER); solo_irq_off(solo_dev, SOLO_IRQ_ENCODER); for (i = 0; i < solo_dev->nr_chans; i++) { for (i = 0; i < solo_dev->nr_chans; i++) { solo_reg_write(solo_dev, SOLO_CAP_CH_SCALE(i), 0); solo_reg_write(solo_dev, SOLO_CAP_CH_SCALE(i), 0); Loading
drivers/staging/solo6x10/g723.c +21 −21 Original line number Original line Diff line number Diff line Loading @@ -52,11 +52,11 @@ struct solo_snd_pcm { struct solo_snd_pcm { int on; int on; spinlock_t lock; spinlock_t lock; struct solo6010_dev *solo_dev; struct solo_dev *solo_dev; unsigned char g723_buf[G723_PERIOD_BYTES]; unsigned char g723_buf[G723_PERIOD_BYTES]; }; }; static void solo_g723_config(struct solo6010_dev *solo_dev) static void solo_g723_config(struct solo_dev *solo_dev) { { int clk_div; int clk_div; Loading @@ -76,7 +76,7 @@ static void solo_g723_config(struct solo6010_dev *solo_dev) SOLO_AUDIO_I2S_MULTI(3) | SOLO_AUDIO_MODE(OUTMODE_MASK)); SOLO_AUDIO_I2S_MULTI(3) | SOLO_AUDIO_MODE(OUTMODE_MASK)); } } void solo_g723_isr(struct solo6010_dev *solo_dev) void solo_g723_isr(struct solo_dev *solo_dev) { { struct snd_pcm_str *pstr = struct snd_pcm_str *pstr = &solo_dev->snd_pcm->streams[SNDRV_PCM_STREAM_CAPTURE]; &solo_dev->snd_pcm->streams[SNDRV_PCM_STREAM_CAPTURE]; Loading Loading @@ -133,7 +133,7 @@ static struct snd_pcm_hardware snd_solo_pcm_hw = { static int snd_solo_pcm_open(struct snd_pcm_substream *ss) static int snd_solo_pcm_open(struct snd_pcm_substream *ss) { { struct solo6010_dev *solo_dev = snd_pcm_substream_chip(ss); struct solo_dev *solo_dev = snd_pcm_substream_chip(ss); struct solo_snd_pcm *solo_pcm; struct solo_snd_pcm *solo_pcm; solo_pcm = kzalloc(sizeof(*solo_pcm), GFP_KERNEL); solo_pcm = kzalloc(sizeof(*solo_pcm), GFP_KERNEL); Loading Loading @@ -162,7 +162,7 @@ static int snd_solo_pcm_close(struct snd_pcm_substream *ss) static int snd_solo_pcm_trigger(struct snd_pcm_substream *ss, int cmd) static int snd_solo_pcm_trigger(struct snd_pcm_substream *ss, int cmd) { { struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); struct solo6010_dev *solo_dev = solo_pcm->solo_dev; struct solo_dev *solo_dev = solo_pcm->solo_dev; int ret = 0; int ret = 0; spin_lock(&solo_pcm->lock); spin_lock(&solo_pcm->lock); Loading @@ -172,7 +172,7 @@ static int snd_solo_pcm_trigger(struct snd_pcm_substream *ss, int cmd) if (solo_pcm->on == 0) { if (solo_pcm->on == 0) { /* If this is the first user, switch on interrupts */ /* If this is the first user, switch on interrupts */ if (atomic_inc_return(&solo_dev->snd_users) == 1) if (atomic_inc_return(&solo_dev->snd_users) == 1) solo6010_irq_on(solo_dev, SOLO_IRQ_G723); solo_irq_on(solo_dev, SOLO_IRQ_G723); solo_pcm->on = 1; solo_pcm->on = 1; } } break; break; Loading @@ -180,7 +180,7 @@ static int snd_solo_pcm_trigger(struct snd_pcm_substream *ss, int cmd) if (solo_pcm->on) { if (solo_pcm->on) { /* If this was our last user, switch them off */ /* If this was our last user, switch them off */ if (atomic_dec_return(&solo_dev->snd_users) == 0) if (atomic_dec_return(&solo_dev->snd_users) == 0) solo6010_irq_off(solo_dev, SOLO_IRQ_G723); solo_irq_off(solo_dev, SOLO_IRQ_G723); solo_pcm->on = 0; solo_pcm->on = 0; } } break; break; Loading @@ -201,7 +201,7 @@ static int snd_solo_pcm_prepare(struct snd_pcm_substream *ss) static snd_pcm_uframes_t snd_solo_pcm_pointer(struct snd_pcm_substream *ss) static snd_pcm_uframes_t snd_solo_pcm_pointer(struct snd_pcm_substream *ss) { { struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); struct solo6010_dev *solo_dev = solo_pcm->solo_dev; struct solo_dev *solo_dev = solo_pcm->solo_dev; snd_pcm_uframes_t idx = solo_reg_read(solo_dev, SOLO_AUDIO_STA) & 0x1f; snd_pcm_uframes_t idx = solo_reg_read(solo_dev, SOLO_AUDIO_STA) & 0x1f; return idx * G723_FRAMES_PER_PAGE; return idx * G723_FRAMES_PER_PAGE; Loading @@ -212,7 +212,7 @@ static int snd_solo_pcm_copy(struct snd_pcm_substream *ss, int channel, snd_pcm_uframes_t count) snd_pcm_uframes_t count) { { struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); struct solo6010_dev *solo_dev = solo_pcm->solo_dev; struct solo_dev *solo_dev = solo_pcm->solo_dev; int err, i; int err, i; for (i = 0; i < (count / G723_FRAMES_PER_PAGE); i++) { for (i = 0; i < (count / G723_FRAMES_PER_PAGE); i++) { Loading Loading @@ -264,7 +264,7 @@ static int snd_solo_capture_volume_info(struct snd_kcontrol *kcontrol, static int snd_solo_capture_volume_get(struct snd_kcontrol *kcontrol, static int snd_solo_capture_volume_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *value) struct snd_ctl_elem_value *value) { { struct solo6010_dev *solo_dev = snd_kcontrol_chip(kcontrol); struct solo_dev *solo_dev = snd_kcontrol_chip(kcontrol); u8 ch = value->id.numid - 1; u8 ch = value->id.numid - 1; value->value.integer.value[0] = tw28_get_audio_gain(solo_dev, ch); value->value.integer.value[0] = tw28_get_audio_gain(solo_dev, ch); Loading @@ -275,7 +275,7 @@ static int snd_solo_capture_volume_get(struct snd_kcontrol *kcontrol, static int snd_solo_capture_volume_put(struct snd_kcontrol *kcontrol, static int snd_solo_capture_volume_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *value) struct snd_ctl_elem_value *value) { { struct solo6010_dev *solo_dev = snd_kcontrol_chip(kcontrol); struct solo_dev *solo_dev = snd_kcontrol_chip(kcontrol); u8 ch = value->id.numid - 1; u8 ch = value->id.numid - 1; u8 old_val; u8 old_val; Loading @@ -296,7 +296,7 @@ static struct snd_kcontrol_new snd_solo_capture_volume = { .put = snd_solo_capture_volume_put, .put = snd_solo_capture_volume_put, }; }; static int solo_snd_pcm_init(struct solo6010_dev *solo_dev) static int solo_snd_pcm_init(struct solo_dev *solo_dev) { { struct snd_card *card = solo_dev->snd_card; struct snd_card *card = solo_dev->snd_card; struct snd_pcm *pcm; struct snd_pcm *pcm; Loading Loading @@ -332,7 +332,7 @@ static int solo_snd_pcm_init(struct solo6010_dev *solo_dev) return 0; return 0; } } int solo_g723_init(struct solo6010_dev *solo_dev) int solo_g723_init(struct solo_dev *solo_dev) { { static struct snd_device_ops ops = { NULL }; static struct snd_device_ops ops = { NULL }; struct snd_card *card; struct snd_card *card; Loading @@ -352,8 +352,8 @@ int solo_g723_init(struct solo6010_dev *solo_dev) card = solo_dev->snd_card; card = solo_dev->snd_card; strcpy(card->driver, SOLO6010_NAME); strcpy(card->driver, SOLO6X10_NAME); strcpy(card->shortname, "SOLO-6010 Audio"); strcpy(card->shortname, "SOLO-6x10 Audio"); sprintf(card->longname, "%s on %s IRQ %d", card->shortname, sprintf(card->longname, "%s on %s IRQ %d", card->shortname, pci_name(solo_dev->pdev), solo_dev->pdev->irq); pci_name(solo_dev->pdev), solo_dev->pdev->irq); snd_card_set_dev(card, &solo_dev->pdev->dev); snd_card_set_dev(card, &solo_dev->pdev->dev); Loading @@ -363,7 +363,7 @@ int solo_g723_init(struct solo6010_dev *solo_dev) goto snd_error; goto snd_error; /* Mixer controls */ /* Mixer controls */ strcpy(card->mixername, "SOLO-6010"); strcpy(card->mixername, "SOLO-6x10"); kctl = snd_solo_capture_volume; kctl = snd_solo_capture_volume; kctl.count = solo_dev->nr_chans; kctl.count = solo_dev->nr_chans; ret = snd_ctl_add(card, snd_ctl_new1(&kctl, solo_dev)); ret = snd_ctl_add(card, snd_ctl_new1(&kctl, solo_dev)); Loading @@ -389,10 +389,10 @@ int solo_g723_init(struct solo6010_dev *solo_dev) return ret; return ret; } } void solo_g723_exit(struct solo6010_dev *solo_dev) void solo_g723_exit(struct solo_dev *solo_dev) { { solo_reg_write(solo_dev, SOLO_AUDIO_CONTROL, 0); solo_reg_write(solo_dev, SOLO_AUDIO_CONTROL, 0); solo6010_irq_off(solo_dev, SOLO_IRQ_G723); solo_irq_off(solo_dev, SOLO_IRQ_G723); snd_card_free(solo_dev->snd_card); snd_card_free(solo_dev->snd_card); } }
drivers/staging/solo6x10/gpio.c +6 −6 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,7 @@ #include <asm/uaccess.h> #include <asm/uaccess.h> #include "solo6x10.h" #include "solo6x10.h" static void solo_gpio_mode(struct solo6010_dev *solo_dev, static void solo_gpio_mode(struct solo_dev *solo_dev, unsigned int port_mask, unsigned int mode) unsigned int port_mask, unsigned int mode) { { int port; int port; Loading Loading @@ -57,19 +57,19 @@ static void solo_gpio_mode(struct solo6010_dev *solo_dev, solo_reg_write(solo_dev, SOLO_GPIO_CONFIG_1, ret); solo_reg_write(solo_dev, SOLO_GPIO_CONFIG_1, ret); } } static void solo_gpio_set(struct solo6010_dev *solo_dev, unsigned int value) static void solo_gpio_set(struct solo_dev *solo_dev, unsigned int value) { { solo_reg_write(solo_dev, SOLO_GPIO_DATA_OUT, solo_reg_write(solo_dev, SOLO_GPIO_DATA_OUT, solo_reg_read(solo_dev, SOLO_GPIO_DATA_OUT) | value); solo_reg_read(solo_dev, SOLO_GPIO_DATA_OUT) | value); } } static void solo_gpio_clear(struct solo6010_dev *solo_dev, unsigned int value) static void solo_gpio_clear(struct solo_dev *solo_dev, unsigned int value) { { solo_reg_write(solo_dev, SOLO_GPIO_DATA_OUT, solo_reg_write(solo_dev, SOLO_GPIO_DATA_OUT, solo_reg_read(solo_dev, SOLO_GPIO_DATA_OUT) & ~value); solo_reg_read(solo_dev, SOLO_GPIO_DATA_OUT) & ~value); } } static void solo_gpio_config(struct solo6010_dev *solo_dev) static void solo_gpio_config(struct solo_dev *solo_dev) { { /* Video reset */ /* Video reset */ solo_gpio_mode(solo_dev, 0x30, 1); solo_gpio_mode(solo_dev, 0x30, 1); Loading @@ -89,13 +89,13 @@ static void solo_gpio_config(struct solo6010_dev *solo_dev) solo_gpio_clear(solo_dev, 0xff00); solo_gpio_clear(solo_dev, 0xff00); } } int solo_gpio_init(struct solo6010_dev *solo_dev) int solo_gpio_init(struct solo_dev *solo_dev) { { solo_gpio_config(solo_dev); solo_gpio_config(solo_dev); return 0; return 0; } } void solo_gpio_exit(struct solo6010_dev *solo_dev) void solo_gpio_exit(struct solo_dev *solo_dev) { { solo_gpio_clear(solo_dev, 0x30); solo_gpio_clear(solo_dev, 0x30); solo_gpio_config(solo_dev); solo_gpio_config(solo_dev); Loading