snd_ps3.c (df9b42963f2d010ae3163a894ce22cf6b27cd344) snd_ps3.c (5cc3203f72d89064da315529103f277124f57005)
1/*
2 * Audio support for PS3
3 * Copyright (C) 2007 Sony Computer Entertainment Inc.
4 * All rights reserved.
5 * Copyright 2006, 2007 Sony Corporation
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License

--- 772 unchanged lines hidden (view full) ---

781 .hw_params = snd_ps3_pcm_hw_params,
782 .hw_free = snd_ps3_pcm_hw_free,
783 .prepare = snd_ps3_pcm_prepare,
784 .trigger = snd_ps3_pcm_trigger,
785 .pointer = snd_ps3_pcm_pointer,
786};
787
788
1/*
2 * Audio support for PS3
3 * Copyright (C) 2007 Sony Computer Entertainment Inc.
4 * All rights reserved.
5 * Copyright 2006, 2007 Sony Corporation
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License

--- 772 unchanged lines hidden (view full) ---

781 .hw_params = snd_ps3_pcm_hw_params,
782 .hw_free = snd_ps3_pcm_hw_free,
783 .prepare = snd_ps3_pcm_prepare,
784 .trigger = snd_ps3_pcm_trigger,
785 .pointer = snd_ps3_pcm_pointer,
786};
787
788
789static int __devinit snd_ps3_map_mmio(void)
789static int snd_ps3_map_mmio(void)
790{
791 the_card.mapped_mmio_vaddr =
792 ioremap(the_card.ps3_dev->m_region->bus_addr,
793 the_card.ps3_dev->m_region->len);
794
795 if (!the_card.mapped_mmio_vaddr) {
796 pr_info("%s: ioremap 0 failed p=%#lx l=%#lx \n",
797 __func__, the_card.ps3_dev->m_region->lpar_addr,

--- 5 unchanged lines hidden (view full) ---

803};
804
805static void snd_ps3_unmap_mmio(void)
806{
807 iounmap(the_card.mapped_mmio_vaddr);
808 the_card.mapped_mmio_vaddr = NULL;
809}
810
790{
791 the_card.mapped_mmio_vaddr =
792 ioremap(the_card.ps3_dev->m_region->bus_addr,
793 the_card.ps3_dev->m_region->len);
794
795 if (!the_card.mapped_mmio_vaddr) {
796 pr_info("%s: ioremap 0 failed p=%#lx l=%#lx \n",
797 __func__, the_card.ps3_dev->m_region->lpar_addr,

--- 5 unchanged lines hidden (view full) ---

803};
804
805static void snd_ps3_unmap_mmio(void)
806{
807 iounmap(the_card.mapped_mmio_vaddr);
808 the_card.mapped_mmio_vaddr = NULL;
809}
810
811static int __devinit snd_ps3_allocate_irq(void)
811static int snd_ps3_allocate_irq(void)
812{
813 int ret;
814 u64 lpar_addr, lpar_size;
815 u64 __iomem *mapped;
816
817 /* FIXME: move this to device_init (H/W probe) */
818
819 /* get irq outlet */

--- 41 unchanged lines hidden (view full) ---

861};
862
863static void snd_ps3_free_irq(void)
864{
865 free_irq(the_card.irq_no, &the_card);
866 ps3_irq_plug_destroy(the_card.irq_no);
867}
868
812{
813 int ret;
814 u64 lpar_addr, lpar_size;
815 u64 __iomem *mapped;
816
817 /* FIXME: move this to device_init (H/W probe) */
818
819 /* get irq outlet */

--- 41 unchanged lines hidden (view full) ---

861};
862
863static void snd_ps3_free_irq(void)
864{
865 free_irq(the_card.irq_no, &the_card);
866 ps3_irq_plug_destroy(the_card.irq_no);
867}
868
869static void __devinit snd_ps3_audio_set_base_addr(uint64_t ioaddr_start)
869static void snd_ps3_audio_set_base_addr(uint64_t ioaddr_start)
870{
871 uint64_t val;
872 int ret;
873
874 val = (ioaddr_start & (0x0fUL << 32)) >> (32 - 20) |
875 (0x03UL << 24) |
876 (0x0fUL << 12) |
877 (PS3_AUDIO_IOID);
878
879 ret = lv1_gpu_attribute(0x100, 0x007, val);
880 if (ret)
881 pr_info("%s: gpu_attribute failed %d\n", __func__,
882 ret);
883}
884
870{
871 uint64_t val;
872 int ret;
873
874 val = (ioaddr_start & (0x0fUL << 32)) >> (32 - 20) |
875 (0x03UL << 24) |
876 (0x0fUL << 12) |
877 (PS3_AUDIO_IOID);
878
879 ret = lv1_gpu_attribute(0x100, 0x007, val);
880 if (ret)
881 pr_info("%s: gpu_attribute failed %d\n", __func__,
882 ret);
883}
884
885static void __devinit snd_ps3_audio_fixup(struct snd_ps3_card_info *card)
885static void snd_ps3_audio_fixup(struct snd_ps3_card_info *card)
886{
887 /*
888 * avsetting driver seems to never change the followings
889 * so, init them here once
890 */
891
892 /* no dma interrupt needed */
893 write_reg(PS3_AUDIO_INTR_EN_0, 0);

--- 7 unchanged lines hidden (view full) ---

901 update_mask_reg(PS3_AUDIO_AO_3WMCTRL,
902 ~(PS3_AUDIO_AO_3WMCTRL_ASOBCLKD_DISABLED |
903 PS3_AUDIO_AO_3WMCTRL_ASOLRCKD_DISABLED),
904 0);
905 update_reg(PS3_AUDIO_AO_3WMCTRL,
906 PS3_AUDIO_AO_3WMCTRL_ASOPLRCK_DEFAULT);
907}
908
886{
887 /*
888 * avsetting driver seems to never change the followings
889 * so, init them here once
890 */
891
892 /* no dma interrupt needed */
893 write_reg(PS3_AUDIO_INTR_EN_0, 0);

--- 7 unchanged lines hidden (view full) ---

901 update_mask_reg(PS3_AUDIO_AO_3WMCTRL,
902 ~(PS3_AUDIO_AO_3WMCTRL_ASOBCLKD_DISABLED |
903 PS3_AUDIO_AO_3WMCTRL_ASOLRCKD_DISABLED),
904 0);
905 update_reg(PS3_AUDIO_AO_3WMCTRL,
906 PS3_AUDIO_AO_3WMCTRL_ASOPLRCK_DEFAULT);
907}
908
909static int __devinit snd_ps3_init_avsetting(struct snd_ps3_card_info *card)
909static int snd_ps3_init_avsetting(struct snd_ps3_card_info *card)
910{
911 int ret;
912 pr_debug("%s: start\n", __func__);
913 card->avs.avs_audio_ch = PS3AV_CMD_AUDIO_NUM_OF_CH_2;
914 card->avs.avs_audio_rate = PS3AV_CMD_AUDIO_FS_48K;
915 card->avs.avs_audio_width = PS3AV_CMD_AUDIO_WORD_BITS_16;
916 card->avs.avs_audio_format = PS3AV_CMD_AUDIO_FORMAT_PCM;
917 card->avs.avs_audio_source = PS3AV_CMD_AUDIO_SOURCE_SERIAL;

--- 5 unchanged lines hidden (view full) ---

923
924 /* to start to generate SPDIF signal, fill data */
925 snd_ps3_program_dma(card, SND_PS3_DMA_FILLTYPE_SILENT_FIRSTFILL);
926 snd_ps3_kick_dma(card);
927 pr_debug("%s: end\n", __func__);
928 return ret;
929}
930
910{
911 int ret;
912 pr_debug("%s: start\n", __func__);
913 card->avs.avs_audio_ch = PS3AV_CMD_AUDIO_NUM_OF_CH_2;
914 card->avs.avs_audio_rate = PS3AV_CMD_AUDIO_FS_48K;
915 card->avs.avs_audio_width = PS3AV_CMD_AUDIO_WORD_BITS_16;
916 card->avs.avs_audio_format = PS3AV_CMD_AUDIO_FORMAT_PCM;
917 card->avs.avs_audio_source = PS3AV_CMD_AUDIO_SOURCE_SERIAL;

--- 5 unchanged lines hidden (view full) ---

923
924 /* to start to generate SPDIF signal, fill data */
925 snd_ps3_program_dma(card, SND_PS3_DMA_FILLTYPE_SILENT_FIRSTFILL);
926 snd_ps3_kick_dma(card);
927 pr_debug("%s: end\n", __func__);
928 return ret;
929}
930
931static int __devinit snd_ps3_driver_probe(struct ps3_system_bus_device *dev)
931static int snd_ps3_driver_probe(struct ps3_system_bus_device *dev)
932{
933 int i, ret;
934 u64 lpar_addr, lpar_size;
935
936 BUG_ON(!firmware_has_feature(FW_FEATURE_PS3_LV1));
937 BUG_ON(dev->match_id != PS3_MATCH_ID_SOUND);
938
939 the_card.ps3_dev = dev;

--- 222 unchanged lines hidden ---
932{
933 int i, ret;
934 u64 lpar_addr, lpar_size;
935
936 BUG_ON(!firmware_has_feature(FW_FEATURE_PS3_LV1));
937 BUG_ON(dev->match_id != PS3_MATCH_ID_SOUND);
938
939 the_card.ps3_dev = dev;

--- 222 unchanged lines hidden ---