diff options
Diffstat (limited to 'snd-alpx/alpx.h')
-rw-r--r-- | snd-alpx/alpx.h | 268 |
1 files changed, 0 insertions, 268 deletions
diff --git a/snd-alpx/alpx.h b/snd-alpx/alpx.h deleted file mode 100644 index 2cad9b9..0000000 --- a/snd-alpx/alpx.h +++ /dev/null @@ -1,268 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* -* Support for Digigram AlpX PCI-e boards -* -* Copyright (c) 2024 Digigram Digital (info@digigram.com) -*/ - -#ifndef _ALPX_H_ -#define _ALPX_H_ - - -#include "alpx_reg.h" -#include "alpx_streams.h" - -#include <linux/version.h> - -#if !defined (CONFIG_WITHOUT_GPIO) -#define ALPX_WITH_GPIO -#include <linux/gpio.h> -#include <linux/gpio/driver.h> -#endif - -#include <linux/mtd/mtd.h> -#include <linux/mtd/partitions.h> -#include <linux/mutex.h> -#include <sound/pcm.h> - -/* Values */ - -#define CARD_NAME "Digigram AlpX" - -#define ALPX_VARIANT_FEATURE_GPIOS BIT(0) - -/* Structures */ - -enum alpx_variant_model { - ALPX_VARIANT_DEAD, - ALPX_VARIANT_MODEL_MADI, - ALPX_VARIANT_MODEL_MADI_LOOPBACK, - ALPX_VARIANT_MODEL_ALP222, - ALPX_VARIANT_MODEL_ALP222_MIC, - ALPX_VARIANT_MODEL_ALP882, - ALPX_VARIANT_MODEL_ALP882_MIC, - ALPX_VARIANT_MODEL_ALP442, - ALPX_VARIANT_MODEL_ALP442_MIC, - ALPX_VARIANT_MODEL_ALPDANTE, -}; - -/* Flash partitions IDs */ -enum ALPX_FLASH_PARTITION_ID { - ALPX_FLASH_PARTITION_GOLDEN_ID = 0, - ALPX_FLASH_PARTITION_FW_ID, - ALPX_FLASH_PARTITION_INIT_CFG_ID, - ALPX_FLASH_PARTITION_USER_CFG_ID, - ALPX_FLASH_PARTITION_PRODUCTION_ID, - ALPX_FLASH_PARTITION_QTY -}; - -/* Flash partitions IDs in DEAD mode ! only production */ -enum ALPX_DEAD_FLASH_PARTITION_ID { - ALPX_DEAD_FLASH_PARTITION_GOLDEN_PROD_ID = 0, - ALPX_DEAD_FLASH_PARTITION_PRODUCTION_ID, - ALPX_DEAD_FLASH_PARTITION_QTY -}; - -/* Structures */ - - -struct alpx_variant_gpios { - unsigned int base; - unsigned int inputs_reg_offset; - unsigned int inputs_qty; - unsigned int outputs_reg_offset; - unsigned int outputs_qty; -}; - -struct alpx_flash_partitions { - struct mtd_partition* partitions; - uint32_t qty; - uint32_t qty_for_fw_update; -}; - -struct alpx_variant { - enum alpx_variant_model model; - const char *shortname; - const char *longname; - const char *mixername; - u64 features; - - struct alpx_control_descriptor *control_descriptors; - unsigned int control_descriptors_count; - - struct snd_pcm_hardware* playback_hw; - struct snd_pcm_hardware* capture_hw; - struct alpx_variant_gpios gpios; - uint32_t flash_golden_production_base; - struct alpx_flash_partitions flash_partitions; -}; - - -struct alpx_config { - spinlock_t lock; - unsigned int users; - - unsigned int rate; -}; - -struct alpx_identity { - uint16_t sub_system_id; /* PCIe sub-system Id as read out of Production area*/ - uint32_t ver_fpga; /* FPGA version */ - uint32_t ver_mcu; /* MCU version.revision !! */ - uint64_t serial_number; /* Card full identifier tag */ -}; - -struct alpx_device { - struct device *dev; - struct pci_dev *pci_dev; -#if defined(ALPX_WITH_GPIO) - struct gpio_chip gpio_chip; -#endif - void *base; - - struct platform_device *xdma_pdev; - struct alpx_config config; - - struct alpx_control *controls; - unsigned int controls_index; - unsigned int controls_count; - - struct alpx_pipe capture; - struct alpx_pipe playback; - - const struct alpx_variant *variant; - - struct mutex proc_mutex; - - struct mtd_info mtd_info; -#ifdef WITH_REG_DEBUG - uint32_t dbg_reg_offset; -#endif - struct alpx_identity identity; -}; - -/* Constants */ - -// The flash chip size (in bytes). -#define ALPX_FLASH_CHIP_SIZE 0x800000 - -// Sector size conversions -#define ALPX_FLASH_SECTOR_SHIFT 12 -#define ALPX_FLASH_SECTOR_SIZE (1 << ALPX_FLASH_SECTOR_SHIFT) - -/* Amplifiers gains */ -#define ALP_AMPLIFIER_GAIN_MIN_cdB -9010 -#define ALP_AMPLIFIER_GAIN_MAX_cdB 1200 - -#define ALP_AMPLIFIER_GAIN_MIN_REG 0 -#define ALP_AMPLIFIER_GAIN_MAX_REG 1021 - -/* MIC Gains tange in dB */ -#define ALP222_MIC_GAINS_MIN_REG_VAL 10 -#define ALP222_MIC_GAINS_MAX_REG_VAL 65 -#define ALP222_MIC_REG_GAIN_SHIFT 9 -#define ALP222_MIC_GAIN_MIN_cdB 1000 -#define ALP222_MIC_GAIN_MAX_cdB 6500 - - -/* ALP222 ANALOG Equalization amplifiers */ -#define ALP222_ANALOG_EQ_GAIN_MIN_cdB -8800 -#define ALP222_ANALOG_EQ_GAIN_MAX_cdB 3900 - -#define ALP222_ANALOG_EQ_GAIN_MIN_REG 0 -#define ALP222_ANALOG_EQ_GAIN_MAX_REG 255 - -/* Registers offset range : from 0x60000 up to 0x7C200*/ -#define ALP222_MIN_REG_OFFSET 0x60000 -#define ALP222_MAX_REG_OFFSET 0x7C200 - -/* Special revisions */ -/* -The design version is 1.5- */ -#define ALP222_1_5_DESIGN_VERSION ((1<<16)|(5)) - -/* BUILD version register appears in version :... */ -#define ALP222_DESIGN_WITH_BUILD_REGISTER_VERSION ALP222_1_5_DESIGN_VERSION - - -/* Range of the LINE/MIC gains (in register domain)*/ -#define ALPMC_LINE_ANALOG_GAIN_MIN_REG 0 -#define ALPMC_LINE_ANALOG_GAIN_MIN_cdB -2400 - -#define ALPMC_MIC_ANALOG_GAIN_MIN_REG ALPMC_LINE_ANALOG_GAIN_MIN_REG -#define ALPMC_MIC_ANALOG_GAIN_MIN_cdB ALPMC_LINE_ANALOG_GAIN_MIN_cdB - - -/* Gain formula : G = (0.5*(N-1)-24), N : register value */ -/* 161 => +56dB */ -#define ALPMC_MIC_ANALOG_GAIN_MAX_REG 162 -#define ALPMC_MIC_ANALOG_GAIN_MAX_cdB 5600 - -/* 82 => +16dB */ -#define ALPMC_LINE_ANALOG_GAIN_MAX_REG 82 -#define ALPMC_LINE_ANALOG_GAIN_MAX_cdB 1600 - -static bool inline alpx_is_madi(struct alpx_device *alpx_dev) -{ - return alpx_dev->variant->model == ALPX_VARIANT_MODEL_MADI || - alpx_dev->variant->model == ALPX_VARIANT_MODEL_MADI_LOOPBACK; -} - -static bool inline alpx_is_222_line(struct alpx_device *alpx_dev) -{ - return alpx_dev->variant->model == ALPX_VARIANT_MODEL_ALP222; -} - -static bool inline alpx_is_222_mic(struct alpx_device *alpx_dev) -{ - return alpx_dev->variant->model == ALPX_VARIANT_MODEL_ALP222_MIC; -} - -static bool inline alpx_is_222(struct alpx_device *alpx_dev) -{ - return alpx_is_222_line(alpx_dev) || alpx_is_222_mic(alpx_dev); -} - -static bool inline alpx_is_882_line(struct alpx_device *alpx_dev) -{ - return alpx_dev->variant->model == ALPX_VARIANT_MODEL_ALP882; -} - -static bool inline alpx_is_882_mic(struct alpx_device *alpx_dev) -{ - return alpx_dev->variant->model == ALPX_VARIANT_MODEL_ALP882_MIC; -} - -static bool inline alpx_is_882(struct alpx_device *alpx_dev) -{ - return alpx_is_882_line(alpx_dev) || alpx_is_882_line(alpx_dev); -} - -static bool inline alpx_is_442_line(struct alpx_device *alpx_dev) -{ - return alpx_dev->variant->model == ALPX_VARIANT_MODEL_ALP442; -} - -static bool inline alpx_is_442_mic(struct alpx_device *alpx_dev) -{ - return alpx_dev->variant->model == ALPX_VARIANT_MODEL_ALP442_MIC; -} - -static bool inline alpx_is_442(struct alpx_device *alpx_dev) -{ - return alpx_is_442_line(alpx_dev) || alpx_is_442_line(alpx_dev); -} - -static bool inline alpx_is_multichannel(struct alpx_device *alpx_dev) -{ - return alpx_is_882(alpx_dev) || alpx_is_442(alpx_dev); -} - -static bool inline alpx_is_dante (struct alpx_device *alpx_dev) -{ - return alpx_dev->variant->model == ALPX_VARIANT_MODEL_ALPDANTE; -} - -unsigned int -alpx_get_samples_counter(struct alpx_device *alpx_dev); - -#endif |