206 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * Driver for the NXP SAA7164 PCIe bridge4 *5 * Copyright (c) 2010-2015 Steven Toth <stoth@kernellabs.com>6 */7 8/* TODO: Retest the driver with errors expressed as negatives */9 10/* Result codes */11#define SAA_OK 012#define SAA_ERR_BAD_PARAMETER 0x0913#define SAA_ERR_NO_RESOURCES 0x0c14#define SAA_ERR_NOT_SUPPORTED 0x1315#define SAA_ERR_BUSY 0x1516#define SAA_ERR_READ 0x1717#define SAA_ERR_TIMEOUT 0x1f18#define SAA_ERR_OVERFLOW 0x2019#define SAA_ERR_EMPTY 0x2220#define SAA_ERR_NOT_STARTED 0x2321#define SAA_ERR_ALREADY_STARTED 0x2422#define SAA_ERR_NOT_STOPPED 0x2523#define SAA_ERR_ALREADY_STOPPED 0x2624#define SAA_ERR_INVALID_COMMAND 0x3e25#define SAA_ERR_NULL_PACKET 0x5926 27/* Errors and flags from the silicon */28#define PVC_ERRORCODE_UNKNOWN 0x0029#define PVC_ERRORCODE_INVALID_COMMAND 0x0130#define PVC_ERRORCODE_INVALID_CONTROL 0x0231#define PVC_ERRORCODE_INVALID_DATA 0x0332#define PVC_ERRORCODE_TIMEOUT 0x0433#define PVC_ERRORCODE_NAK 0x0534#define PVC_RESPONSEFLAG_ERROR 0x0135#define PVC_RESPONSEFLAG_OVERFLOW 0x0236#define PVC_RESPONSEFLAG_RESET 0x0437#define PVC_RESPONSEFLAG_INTERFACE 0x0838#define PVC_RESPONSEFLAG_CONTINUED 0x1039#define PVC_CMDFLAG_INTERRUPT 0x0240#define PVC_CMDFLAG_INTERFACE 0x0441#define PVC_CMDFLAG_SERIALIZE 0x0842#define PVC_CMDFLAG_CONTINUE 0x1043 44/* Silicon Commands */45#define GET_DESCRIPTORS_CONTROL 0x0146#define GET_STRING_CONTROL 0x0347#define GET_LANGUAGE_CONTROL 0x0548#define SET_POWER_CONTROL 0x0749#define GET_FW_STATUS_CONTROL 0x0850#define GET_FW_VERSION_CONTROL 0x0951#define SET_DEBUG_LEVEL_CONTROL 0x0B52#define GET_DEBUG_DATA_CONTROL 0x0C53#define GET_PRODUCTION_INFO_CONTROL 0x0D54 55/* cmd defines */56#define SAA_CMDFLAG_CONTINUE 0x1057#define SAA_CMD_MAX_MSG_UNITS 25658 59/* Some defines */60#define SAA_BUS_TIMEOUT 5061#define SAA_DEVICE_TIMEOUT 500062#define SAA_DEVICE_MAXREQUESTSIZE 25663 64/* Register addresses */65#define SAA_DEVICE_VERSION 0x3066#define SAA_DOWNLOAD_FLAGS 0x3467#define SAA_DOWNLOAD_FLAG 0x3468#define SAA_DOWNLOAD_FLAG_ACK 0x3869#define SAA_DATAREADY_FLAG 0x3C70#define SAA_DATAREADY_FLAG_ACK 0x4071 72/* Boot loader register and bit definitions */73#define SAA_BOOTLOADERERROR_FLAGS 0x4474#define SAA_DEVICE_IMAGE_SEARCHING 0x0175#define SAA_DEVICE_IMAGE_LOADING 0x0276#define SAA_DEVICE_IMAGE_BOOTING 0x0377#define SAA_DEVICE_IMAGE_CORRUPT 0x0478#define SAA_DEVICE_MEMORY_CORRUPT 0x0879#define SAA_DEVICE_NO_IMAGE 0x1080 81/* Register addresses */82#define SAA_DEVICE_2ND_VERSION 0x5083#define SAA_DEVICE_2ND_DOWNLOADFLAG_OFFSET 0x5484 85/* Register addresses */86#define SAA_SECONDSTAGEERROR_FLAGS 0x6487 88/* Bootloader regs and flags */89#define SAA_DEVICE_DEADLOCK_DETECTED_OFFSET 0x6C90#define SAA_DEVICE_DEADLOCK_DETECTED 0xDEADDEAD91 92/* Basic firmware status registers */93#define SAA_DEVICE_SYSINIT_STATUS_OFFSET 0x7094#define SAA_DEVICE_SYSINIT_STATUS 0x7095#define SAA_DEVICE_SYSINIT_MODE 0x7496#define SAA_DEVICE_SYSINIT_SPEC 0x7897#define SAA_DEVICE_SYSINIT_INST 0x7C98#define SAA_DEVICE_SYSINIT_CPULOAD 0x8099#define SAA_DEVICE_SYSINIT_REMAINHEAP 0x84100 101#define SAA_DEVICE_DOWNLOAD_OFFSET 0x1000102#define SAA_DEVICE_BUFFERBLOCKSIZE 0x1000103 104#define SAA_DEVICE_2ND_BUFFERBLOCKSIZE 0x100000105#define SAA_DEVICE_2ND_DOWNLOAD_OFFSET 0x200000106 107/* Descriptors */108#define CS_INTERFACE 0x24109 110/* Descriptor subtypes */111#define VC_INPUT_TERMINAL 0x02112#define VC_OUTPUT_TERMINAL 0x03113#define VC_SELECTOR_UNIT 0x04114#define VC_PROCESSING_UNIT 0x05115#define FEATURE_UNIT 0x06116#define TUNER_UNIT 0x09117#define ENCODER_UNIT 0x0A118#define EXTENSION_UNIT 0x0B119#define VC_TUNER_PATH 0xF0120#define PVC_HARDWARE_DESCRIPTOR 0xF1121#define PVC_INTERFACE_DESCRIPTOR 0xF2122#define PVC_INFRARED_UNIT 0xF3123#define DRM_UNIT 0xF4124#define GENERAL_REQUEST 0xF5125 126/* Format Types */127#define VS_FORMAT_TYPE 0x02128#define VS_FORMAT_TYPE_I 0x01129#define VS_FORMAT_UNCOMPRESSED 0x04130#define VS_FRAME_UNCOMPRESSED 0x05131#define VS_FORMAT_MPEG2PS 0x09132#define VS_FORMAT_MPEG2TS 0x0A133#define VS_FORMAT_MPEG4SL 0x0B134#define VS_FORMAT_WM9 0x0C135#define VS_FORMAT_DIVX 0x0D136#define VS_FORMAT_VBI 0x0E137#define VS_FORMAT_RDS 0x0F138 139/* Device extension commands */140#define EXU_REGISTER_ACCESS_CONTROL 0x00141#define EXU_GPIO_CONTROL 0x01142#define EXU_GPIO_GROUP_CONTROL 0x02143#define EXU_INTERRUPT_CONTROL 0x03144 145/* State Transition and args */146#define SAA_PROBE_CONTROL 0x01147#define SAA_COMMIT_CONTROL 0x02148#define SAA_STATE_CONTROL 0x03149#define SAA_DMASTATE_STOP 0x00150#define SAA_DMASTATE_ACQUIRE 0x01151#define SAA_DMASTATE_PAUSE 0x02152#define SAA_DMASTATE_RUN 0x03153 154/* A/V Mux Input Selector */155#define SU_INPUT_SELECT_CONTROL 0x01156 157/* Encoder Profiles */158#define EU_PROFILE_PS_DVD 0x06159#define EU_PROFILE_TS_HQ 0x09160#define EU_VIDEO_FORMAT_MPEG_2 0x02161 162/* Tuner */163#define TU_AUDIO_MODE_CONTROL 0x17164 165/* Video Formats */166#define TU_STANDARD_CONTROL 0x00167#define TU_STANDARD_AUTO_CONTROL 0x01168#define TU_STANDARD_NONE 0x00169#define TU_STANDARD_NTSC_M 0x01170#define TU_STANDARD_PAL_I 0x08171#define TU_STANDARD_MANUAL 0x00172#define TU_STANDARD_AUTO 0x01173 174/* Video Controls */175#define PU_BRIGHTNESS_CONTROL 0x02176#define PU_CONTRAST_CONTROL 0x03177#define PU_HUE_CONTROL 0x06178#define PU_SATURATION_CONTROL 0x07179#define PU_SHARPNESS_CONTROL 0x08180 181/* Audio Controls */182#define MUTE_CONTROL 0x01183#define VOLUME_CONTROL 0x02184#define AUDIO_DEFAULT_CONTROL 0x0D185 186/* Default Volume Levels */187#define TMHW_LEV_ADJ_DECLEV_DEFAULT 0x00188#define TMHW_LEV_ADJ_MONOLEV_DEFAULT 0x00189#define TMHW_LEV_ADJ_NICLEV_DEFAULT 0x00190#define TMHW_LEV_ADJ_SAPLEV_DEFAULT 0x00191#define TMHW_LEV_ADJ_ADCLEV_DEFAULT 0x00192 193/* Encoder Related Commands */194#define EU_PROFILE_CONTROL 0x00195#define EU_VIDEO_FORMAT_CONTROL 0x01196#define EU_VIDEO_BIT_RATE_CONTROL 0x02197#define EU_VIDEO_RESOLUTION_CONTROL 0x03198#define EU_VIDEO_GOP_STRUCTURE_CONTROL 0x04199#define EU_VIDEO_INPUT_ASPECT_CONTROL 0x0A200#define EU_AUDIO_FORMAT_CONTROL 0x0C201#define EU_AUDIO_BIT_RATE_CONTROL 0x0D202 203/* Firmware Debugging */204#define SET_DEBUG_LEVEL_CONTROL 0x0B205#define GET_DEBUG_DATA_CONTROL 0x0C206