Changes in 4.9.276 ALSA: usb-audio: fix rate on Ozone Z90 USB headset media: dvb-usb: fix wrong definition Input: usbtouchscreen - fix control-request directions net: can: ems_usb: fix use-after-free in ems_usb_disconnect() usb: gadget: eem: fix echo command packet response issue USB: cdc-acm: blacklist Heimann USB Appset device ntfs: fix validity check for file name attribute iov_iter_fault_in_readable() should do nothing in xarray case Input: joydev - prevent use of not validated data in JSIOCSBTNMAP ioctl ARM: dts: at91: sama5d4: fix pinctrl muxing btrfs: clear defrag status of a root if starting transaction fails ext4: fix kernel infoleak via ext4_extent_header ext4: correct the cache_nr in tracepoint ext4_es_shrink_exit ext4: remove check for zero nr_to_scan in ext4_es_scan() ext4: fix avefreec in find_group_orlov SUNRPC: Fix the batch tasks count wraparound. SUNRPC: Should wake up the privileged task firstly. s390/cio: dont call css_wait_for_slow_path() inside a lock iio: ltr501: mark register holding upper 8 bits of ALS_DATA{0,1} and PS_DATA as volatile, too iio: ltr501: ltr559: fix initialization of LTR501_ALS_CONTR iio: ltr501: ltr501_read_ps(): add missing endianness conversion serial: sh-sci: Stop dmaengine transfer in sci_stop_tx() serial_cs: Add Option International GSM-Ready 56K/ISDN modem serial_cs: remove wrong GLOBETROTTER.cis entry ath9k: Fix kernel NULL pointer dereference during ath_reset_internal() ssb: sdio: Don't overwrite const buffer if block_write fails seq_buf: Make trace_seq_putmem_hex() support data longer than 8 fuse: check connected before queueing on fpq->io spi: spi-loopback-test: Fix 'tx_buf' might be 'rx_buf' spi: spi-topcliff-pch: Fix potential double free in pch_spi_process_messages() spi: omap-100k: Fix the length judgment problem crypto: nx - add missing MODULE_DEVICE_TABLE media: cpia2: fix memory leak in cpia2_usb_probe media: cobalt: fix race condition in setting HPD media: pvrusb2: fix warning in pvr2_i2c_core_done crypto: qat - check return code of qat_hal_rd_rel_reg() crypto: qat - remove unused macro in FW loader media: v4l2-core: Avoid the dangling pointer in v4l2_fh_release media: bt8xx: Fix a missing check bug in bt878_probe media: st-hva: Fix potential NULL pointer dereferences mmc: via-sdmmc: add a check against NULL pointer dereference crypto: shash - avoid comparing pointers to exported functions under CFI media: dvb_net: avoid speculation from net slot media: siano: fix device register error path btrfs: abort transaction if we fail to update the delayed inode btrfs: disable build on platforms having page size 256K regulator: da9052: Ensure enough delay time for .set_voltage_time_sel ACPI: processor idle: Fix up C-state latency if not ordered block_dump: remove block_dump feature in mark_inode_dirty() fs: dlm: cancel work sync othercon random32: Fix implicit truncation warning in prandom_seed_state() fs: dlm: fix memory leak when fenced ACPI: bus: Call kobject_put() in acpi_init() error path platform/x86: toshiba_acpi: Fix missing error code in toshiba_acpi_setup_keyboard() ACPI: tables: Add custom DSDT file as makefile prerequisite ia64: mca_drv: fix incorrect array size calculation media: s5p_cec: decrement usage count if disabled crypto: ixp4xx - dma_unmap the correct address crypto: ux500 - Fix error return code in hash_hw_final() sata_highbank: fix deferred probing pata_rb532_cf: fix deferred probing media: I2C: change 'RST' to "RSET" to fix multiple build errors pata_octeon_cf: avoid WARN_ON() in ata_host_activate() pata_ep93xx: fix deferred probing media: tc358743: Fix error return code in tc358743_probe_of() media: siano: Fix out-of-bounds warnings in smscore_load_firmware_family2() mmc: usdhi6rol0: fix error return code in usdhi6_probe() media: s5p-g2d: Fix a memory leak on ctx->fh.m2m_ctx hwmon: (max31722) Remove non-standard ACPI device IDs hwmon: (max31790) Fix fan speed reporting for fan7..12 spi: spi-sun6i: Fix chipselect/clock bug crypto: nx - Fix RCU warning in nx842_OF_upd_status ACPI: sysfs: Fix a buffer overrun problem with description_show() ocfs2: fix snprintf() checking net: pch_gbe: Propagate error from devm_gpio_request_one() ehea: fix error return code in ehea_restart_qps() RDMA/rxe: Fix failure during driver load drm: qxl: ensure surf.data is ininitialized wireless: carl9170: fix LEDS build errors & warnings brcmsmac: mac80211_if: Fix a resource leak in an error handling path ath10k: Fix an error code in ath10k_add_interface() netlabel: Fix memory leak in netlbl_mgmt_add_common netfilter: nft_exthdr: check for IPv6 packet before further processing net: ethernet: aeroflex: fix UAF in greth_of_remove net: ethernet: ezchip: fix UAF in nps_enet_remove net: ethernet: ezchip: fix error handling vxlan: add missing rcu_read_lock() in neigh_reduce() i40e: Fix error handling in i40e_vsi_open Bluetooth: mgmt: Fix slab-out-of-bounds in tlv_data_is_valid writeback: fix obtain a reference to a freeing memcg css net: sched: fix warning in tcindex_alloc_perfect_hash tty: nozomi: Fix a resource leak in an error handling function iio: adis_buffer: do not return ints in irq handlers iio: accel: bma180: Fix buffer alignment in iio_push_to_buffers_with_timestamp() iio: accel: bma220: Fix buffer alignment in iio_push_to_buffers_with_timestamp() iio: accel: kxcjk-1013: Fix buffer alignment in iio_push_to_buffers_with_timestamp() iio: accel: stk8312: Fix buffer alignment in iio_push_to_buffers_with_timestamp() iio: accel: stk8ba50: Fix buffer alignment in iio_push_to_buffers_with_timestamp() iio: adc: ti-ads1015: Fix buffer alignment in iio_push_to_buffers_with_timestamp() iio: adc: vf610: Fix buffer alignment in iio_push_to_buffers_with_timestamp() iio: gyro: bmg160: Fix buffer alignment in iio_push_to_buffers_with_timestamp() iio: humidity: am2315: Fix buffer alignment in iio_push_to_buffers_with_timestamp() iio: prox: pulsed-light: Fix buffer alignment in iio_push_to_buffers_with_timestamp() iio: light: isl29125: Fix buffer alignment in iio_push_to_buffers_with_timestamp() iio: light: tcs3414: Fix buffer alignment in iio_push_to_buffers_with_timestamp() Input: hil_kbd - fix error return code in hil_dev_connect() char: pcmcia: error out if 'num_bytes_read' is greater than 4 in set_protocol() tty: nozomi: Fix the error handling path of 'nozomi_card_init()' scsi: FlashPoint: Rename si_flags field s390: appldata depends on PROC_SYSCTL staging: gdm724x: check for buffer overflow in gdm_lte_multi_sdu_pkt() staging: gdm724x: check for overflow in gdm_lte_netif_rx() of: Fix truncation of memory sizes on 32-bit platforms scsi: mpt3sas: Fix error return value in _scsih_expander_add() phy: ti: dm816x: Fix the error handling path in 'dm816x_usb_phy_probe() extcon: sm5502: Drop invalid register write in sm5502_reg_data extcon: max8997: Add missing modalias string configfs: fix memleak in configfs_release_bin_file leds: ktd2692: Fix an error handling path mm/huge_memory.c: don't discard hugepage if other processes are mapping it selftests/vm/pkeys: fix alloc_random_pkey() to make it really, really random mmc: vub3000: fix control-request direction scsi: core: Retry I/O for Notify (Enable Spinup) Required error net: pch_gbe: Use proper accessors to BE data in pch_ptp_match() hugetlb: clear huge pte during flush function on mips platform atm: iphase: fix possible use-after-free in ia_module_exit() mISDN: fix possible use-after-free in HFC_cleanup() atm: nicstar: Fix possible use-after-free in nicstar_cleanup() net: Treat __napi_schedule_irqoff() as __napi_schedule() on PREEMPT_RT reiserfs: add check for invalid 1st journal block drm/virtio: Fix double free on probe failure udf: Fix NULL pointer dereference in udf_symlink function e100: handle eeprom as little endian clk: tegra: Ensure that PLLU configuration is applied properly ipv6: use prandom_u32() for ID generation RDMA/cxgb4: Fix missing error code in create_qp() dm space maps: don't reset space map allocation cursor when committing net: micrel: check return value after calling platform_get_resource() fjes: check return value after calling platform_get_resource() selinux: use __GFP_NOWARN with GFP_NOWAIT in the AVC xfrm: Fix error reporting in xfrm_state_construct. wlcore/wl12xx: Fix wl12xx get_mac error if device is in ELP wl1251: Fix possible buffer overflow in wl1251_cmd_scan cw1200: add missing MODULE_DEVICE_TABLE MIPS: add PMD table accounting into MIPS'pmd_alloc_one atm: nicstar: use 'dma_free_coherent' instead of 'kfree' atm: nicstar: register the interrupt handler in the right place RDMA/rxe: Don't overwrite errno from ib_umem_get() sfc: avoid double pci_remove of VFs sfc: error code if SRIOV cannot be disabled wireless: wext-spy: Fix out-of-bounds warning RDMA/cma: Fix rdma_resolve_route() memory leak Bluetooth: Fix the HCI to MGMT status conversion table Bluetooth: Shutdown controller after workqueues are flushed or cancelled Bluetooth: btusb: fix bt fiwmare downloading failure issue for qca btsoc. sctp: add size validation when walking chunks fuse: reject internal errno can: gw: synchronize rcu operations before removing gw job entry can: bcm: delay release of struct bcm_op after synchronize_rcu() mac80211: fix memory corruption in EAPOL handling powerpc/barrier: Avoid collision with clang's __lwsync macro pinctrl/amd: Add device HID for new AMD GPIO controller mmc: sdhci: Fix warning message when accessing RPMB in HS400 mode mmc: core: clear flags before allowing to retune ata: ahci_sunxi: Disable DIPM ASoC: tegra: Set driver_name=tegra for all machine drivers qemu_fw_cfg: Make fw_cfg_rev_attr a proper kobj_attribute ipmi/watchdog: Stop watchdog timer when the current action is 'none' power: supply: ab8500: Fix an old bug seq_buf: Fix overflow in seq_buf_putmem_hex() ipack/carriers/tpci200: Fix a double free in tpci200_pci_probe dm btree remove: assign new_root only when removal succeeds media: dtv5100: fix control-request directions media: zr364xx: fix memory leak in zr364xx_start_readpipe media: gspca/sq905: fix control-request direction media: gspca/sunplus: fix zero-length control requests media: uvcvideo: Fix pixel format change for Elgato Cam Link 4K jfs: fix GPF in diFree smackfs: restrict bytes count in smk_set_cipso() KVM: x86: Use guest MAXPHYADDR from CPUID.0x8000_0008 iff TDP is enabled KVM: X86: Disable hardware breakpoints unconditionally before kvm_x86->run() scsi: core: Fix bad pointer dereference when ehandler kthread is invalid tracing: Do not reference char * as a string in histograms fscrypt: don't ignore minor_hash when hash is 0 tty: serial: fsl_lpuart: fix the potential risk of division or modulo by zero misc/libmasm/module: Fix two use after free in ibmasm_init_one Revert "ALSA: bebob/oxfw: fix Kconfig entry for Mackie d.2 Pro" scsi: lpfc: Fix "Unexpected timeout" error in direct attach topology tty: serial: 8250: serial_cs: Fix a memory leak in error handling path fs/jfs: Fix missing error code in lmLogInit() scsi: iscsi: Add iscsi_cls_conn refcount helpers mfd: da9052/stmpe: Add and modify MODULE_DEVICE_TABLE s390/sclp_vt220: fix console name to match device ALSA: sb: Fix potential double-free of CSP mixer elements powerpc/ps3: Add dma_mask to ps3_dma_region gpio: zynq: Check return value of pm_runtime_get_sync ALSA: ppc: fix error return code in snd_pmac_probe() selftests/powerpc: Fix "no_handler" EBB selftest ASoC: soc-core: Fix the error return code in snd_soc_of_parse_audio_routing() ALSA: bebob: add support for ToneWeal FW66 usb: gadget: f_hid: fix endianness issue with descriptors usb: gadget: hid: fix error return code in hid_bind() powerpc/boot: Fixup device-tree on little endian backlight: lm3630a: Fix return code of .update_status() callback ALSA: hda: Add IRQ check for platform_get_irq() i2c: core: Disable client irq on reboot/shutdown lib/decompress_unlz4.c: correctly handle zero-padding around initrds. pwm: spear: Don't modify HW state in .remove callback power: supply: ab8500: Avoid NULL pointers power: reset: gpio-poweroff: add missing MODULE_DEVICE_TABLE ARM: 9087/1: kprobes: test-thumb: fix for LLVM_IAS=1 watchdog: Fix possible use-after-free in wdt_startup() watchdog: sc520_wdt: Fix possible use-after-free in wdt_turnoff() watchdog: Fix possible use-after-free by calling del_timer_sync() x86/fpu: Return proper error codes from user access functions orangefs: fix orangefs df output. ceph: remove bogus checks and WARN_ONs from ceph_set_page_dirty power: supply: charger-manager: add missing MODULE_DEVICE_TABLE power: supply: ab8500: add missing MODULE_DEVICE_TABLE pwm: tegra: Don't modify HW state in .remove callback ACPI: AMBA: Fix resource name in /proc/iomem virtio-blk: Fix memory leak among suspend/resume procedure virtio_console: Assure used length from device is limited PCI/sysfs: Fix dsm_label_utf16s_to_utf8s() buffer overrun power: supply: rt5033_battery: Fix device tree enumeration um: fix error return code in slip_open() um: fix error return code in winch_tramp() watchdog: aspeed: fix hardware timeout calculation nfs: fix acl memory leak of posix_acl_create() ubifs: Set/Clear I_LINKABLE under i_lock for whiteout inode x86/fpu: Limit xstate copy size in xstateregs_set() ALSA: isa: Fix error return code in snd_cmi8330_probe() hexagon: use common DISCARDS macro ARM: dts: exynos: fix PWM LED max brightness on Odroid XU/XU3 ARM: dts: exynos: fix PWM LED max brightness on Odroid XU4 rtc: fix snprintf() checking in is_rtc_hctosys() ARM: dts: r8a7779, marzen: Fix DU clock names reset: bail if try_module_get() fails memory: fsl_ifc: fix leak of IO mapping on probe failure memory: fsl_ifc: fix leak of private memory on probe failure ARM: dts: am335x: align ti,pindir-d0-out-d1-in property with dt-shema scsi: be2iscsi: Fix an error handling path in beiscsi_dev_probe() mips: always link byteswap helpers into decompressor mips: disable branch profiling in boot/decompress.o MIPS: vdso: Invalid GIC access through VDSO seq_file: disallow extremely large seq buffer allocations Linux 4.9.276 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I595c090068eb1b1934b15a0d54394abc38b4b0cc
387 lines
10 KiB
C
387 lines
10 KiB
C
/*
|
|
* cobalt driver internal defines and structures
|
|
*
|
|
* Derived from cx18-driver.h
|
|
*
|
|
* Copyright 2012-2015 Cisco Systems, Inc. and/or its affiliates.
|
|
* All rights reserved.
|
|
*
|
|
* This program is free software; you may redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; version 2 of the License.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
* SOFTWARE.
|
|
*/
|
|
|
|
#ifndef COBALT_DRIVER_H
|
|
#define COBALT_DRIVER_H
|
|
|
|
#include <linux/module.h>
|
|
#include <linux/pci.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/i2c.h>
|
|
#include <linux/list.h>
|
|
#include <linux/workqueue.h>
|
|
#include <linux/mutex.h>
|
|
|
|
#include <media/v4l2-common.h>
|
|
#include <media/v4l2-ioctl.h>
|
|
#include <media/v4l2-device.h>
|
|
#include <media/v4l2-fh.h>
|
|
#include <media/videobuf2-v4l2.h>
|
|
#include <media/videobuf2-dma-sg.h>
|
|
|
|
#include "m00233_video_measure_memmap_package.h"
|
|
#include "m00235_fdma_packer_memmap_package.h"
|
|
#include "m00389_cvi_memmap_package.h"
|
|
#include "m00460_evcnt_memmap_package.h"
|
|
#include "m00473_freewheel_memmap_package.h"
|
|
#include "m00479_clk_loss_detector_memmap_package.h"
|
|
#include "m00514_syncgen_flow_evcnt_memmap_package.h"
|
|
|
|
/* System device ID */
|
|
#define PCI_DEVICE_ID_COBALT 0x2732
|
|
|
|
/* Number of cobalt device nodes. */
|
|
#define COBALT_NUM_INPUTS 4
|
|
#define COBALT_NUM_NODES 6
|
|
|
|
/* Number of cobalt device streams. */
|
|
#define COBALT_NUM_STREAMS 12
|
|
|
|
#define COBALT_HSMA_IN_NODE 4
|
|
#define COBALT_HSMA_OUT_NODE 5
|
|
|
|
/* Cobalt audio streams */
|
|
#define COBALT_AUDIO_IN_STREAM 6
|
|
#define COBALT_AUDIO_OUT_STREAM 11
|
|
|
|
/* DMA stuff */
|
|
#define DMA_CHANNELS_MAX 16
|
|
|
|
/* i2c stuff */
|
|
#define I2C_CLIENTS_MAX 16
|
|
#define COBALT_NUM_ADAPTERS 5
|
|
|
|
#define COBALT_CLK 50000000
|
|
|
|
/* System status register */
|
|
#define COBALT_SYSSTAT_DIP0_MSK (1 << 0)
|
|
#define COBALT_SYSSTAT_DIP1_MSK (1 << 1)
|
|
#define COBALT_SYSSTAT_HSMA_PRSNTN_MSK (1 << 2)
|
|
#define COBALT_SYSSTAT_FLASH_RDYBSYN_MSK (1 << 3)
|
|
#define COBALT_SYSSTAT_VI0_5V_MSK (1 << 4)
|
|
#define COBALT_SYSSTAT_VI0_INT1_MSK (1 << 5)
|
|
#define COBALT_SYSSTAT_VI0_INT2_MSK (1 << 6)
|
|
#define COBALT_SYSSTAT_VI0_LOST_DATA_MSK (1 << 7)
|
|
#define COBALT_SYSSTAT_VI1_5V_MSK (1 << 8)
|
|
#define COBALT_SYSSTAT_VI1_INT1_MSK (1 << 9)
|
|
#define COBALT_SYSSTAT_VI1_INT2_MSK (1 << 10)
|
|
#define COBALT_SYSSTAT_VI1_LOST_DATA_MSK (1 << 11)
|
|
#define COBALT_SYSSTAT_VI2_5V_MSK (1 << 12)
|
|
#define COBALT_SYSSTAT_VI2_INT1_MSK (1 << 13)
|
|
#define COBALT_SYSSTAT_VI2_INT2_MSK (1 << 14)
|
|
#define COBALT_SYSSTAT_VI2_LOST_DATA_MSK (1 << 15)
|
|
#define COBALT_SYSSTAT_VI3_5V_MSK (1 << 16)
|
|
#define COBALT_SYSSTAT_VI3_INT1_MSK (1 << 17)
|
|
#define COBALT_SYSSTAT_VI3_INT2_MSK (1 << 18)
|
|
#define COBALT_SYSSTAT_VI3_LOST_DATA_MSK (1 << 19)
|
|
#define COBALT_SYSSTAT_VIHSMA_5V_MSK (1 << 20)
|
|
#define COBALT_SYSSTAT_VIHSMA_INT1_MSK (1 << 21)
|
|
#define COBALT_SYSSTAT_VIHSMA_INT2_MSK (1 << 22)
|
|
#define COBALT_SYSSTAT_VIHSMA_LOST_DATA_MSK (1 << 23)
|
|
#define COBALT_SYSSTAT_VOHSMA_INT1_MSK (1 << 24)
|
|
#define COBALT_SYSSTAT_VOHSMA_PLL_LOCKED_MSK (1 << 25)
|
|
#define COBALT_SYSSTAT_VOHSMA_LOST_DATA_MSK (1 << 26)
|
|
#define COBALT_SYSSTAT_AUD_PLL_LOCKED_MSK (1 << 28)
|
|
#define COBALT_SYSSTAT_AUD_IN_LOST_DATA_MSK (1 << 29)
|
|
#define COBALT_SYSSTAT_AUD_OUT_LOST_DATA_MSK (1 << 30)
|
|
#define COBALT_SYSSTAT_PCIE_SMBCLK_MSK (1 << 31)
|
|
|
|
/* Cobalt memory map */
|
|
#define COBALT_I2C_0_BASE 0x0
|
|
#define COBALT_I2C_1_BASE 0x080
|
|
#define COBALT_I2C_2_BASE 0x100
|
|
#define COBALT_I2C_3_BASE 0x180
|
|
#define COBALT_I2C_HSMA_BASE 0x200
|
|
|
|
#define COBALT_SYS_CTRL_BASE 0x400
|
|
#define COBALT_SYS_CTRL_HSMA_TX_ENABLE_BIT 1
|
|
#define COBALT_SYS_CTRL_VIDEO_RX_RESETN_BIT(n) (4 + 4 * (n))
|
|
#define COBALT_SYS_CTRL_NRESET_TO_HDMI_BIT(n) (5 + 4 * (n))
|
|
#define COBALT_SYS_CTRL_HPD_TO_CONNECTOR_BIT(n) (6 + 4 * (n))
|
|
#define COBALT_SYS_CTRL_AUDIO_IPP_RESETN_BIT(n) (7 + 4 * (n))
|
|
#define COBALT_SYS_CTRL_PWRDN0_TO_HSMA_TX_BIT 24
|
|
#define COBALT_SYS_CTRL_VIDEO_TX_RESETN_BIT 25
|
|
#define COBALT_SYS_CTRL_AUDIO_OPP_RESETN_BIT 27
|
|
|
|
#define COBALT_SYS_STAT_BASE 0x500
|
|
#define COBALT_SYS_STAT_MASK (COBALT_SYS_STAT_BASE + 0x08)
|
|
#define COBALT_SYS_STAT_EDGE (COBALT_SYS_STAT_BASE + 0x0c)
|
|
|
|
#define COBALT_HDL_INFO_BASE 0x4800
|
|
#define COBALT_HDL_INFO_SIZE 0x200
|
|
|
|
#define COBALT_VID_BASE 0x10000
|
|
#define COBALT_VID_SIZE 0x1000
|
|
|
|
#define COBALT_CVI(cobalt, c) \
|
|
(cobalt->bar1 + COBALT_VID_BASE + (c) * COBALT_VID_SIZE)
|
|
#define COBALT_CVI_VMR(cobalt, c) \
|
|
(cobalt->bar1 + COBALT_VID_BASE + (c) * COBALT_VID_SIZE + 0x100)
|
|
#define COBALT_CVI_EVCNT(cobalt, c) \
|
|
(cobalt->bar1 + COBALT_VID_BASE + (c) * COBALT_VID_SIZE + 0x200)
|
|
#define COBALT_CVI_FREEWHEEL(cobalt, c) \
|
|
(cobalt->bar1 + COBALT_VID_BASE + (c) * COBALT_VID_SIZE + 0x300)
|
|
#define COBALT_CVI_CLK_LOSS(cobalt, c) \
|
|
(cobalt->bar1 + COBALT_VID_BASE + (c) * COBALT_VID_SIZE + 0x400)
|
|
#define COBALT_CVI_PACKER(cobalt, c) \
|
|
(cobalt->bar1 + COBALT_VID_BASE + (c) * COBALT_VID_SIZE + 0x500)
|
|
|
|
#define COBALT_TX_BASE(cobalt) (cobalt->bar1 + COBALT_VID_BASE + 0x5000)
|
|
|
|
#define DMA_INTERRUPT_STATUS_REG 0x08
|
|
|
|
#define COBALT_HDL_SEARCH_STR "** HDL version info **"
|
|
|
|
/* Cobalt CPU bus interface */
|
|
#define COBALT_BUS_BAR1_BASE 0x600
|
|
#define COBALT_BUS_SRAM_BASE 0x0
|
|
#define COBALT_BUS_CPLD_BASE 0x00600000
|
|
#define COBALT_BUS_FLASH_BASE 0x08000000
|
|
|
|
/* FDMA to PCIe packing */
|
|
#define COBALT_BYTES_PER_PIXEL_YUYV 2
|
|
#define COBALT_BYTES_PER_PIXEL_RGB24 3
|
|
#define COBALT_BYTES_PER_PIXEL_RGB32 4
|
|
|
|
/* debugging */
|
|
extern int cobalt_debug;
|
|
extern int cobalt_ignore_err;
|
|
|
|
#define cobalt_err(fmt, arg...) v4l2_err(&cobalt->v4l2_dev, fmt, ## arg)
|
|
#define cobalt_warn(fmt, arg...) v4l2_warn(&cobalt->v4l2_dev, fmt, ## arg)
|
|
#define cobalt_info(fmt, arg...) v4l2_info(&cobalt->v4l2_dev, fmt, ## arg)
|
|
#define cobalt_dbg(level, fmt, arg...) \
|
|
v4l2_dbg(level, cobalt_debug, &cobalt->v4l2_dev, fmt, ## arg)
|
|
|
|
struct cobalt;
|
|
struct cobalt_i2c_regs;
|
|
|
|
/* Per I2C bus private algo callback data */
|
|
struct cobalt_i2c_data {
|
|
struct cobalt *cobalt;
|
|
struct cobalt_i2c_regs __iomem *regs;
|
|
};
|
|
|
|
struct pci_consistent_buffer {
|
|
void *virt;
|
|
dma_addr_t bus;
|
|
size_t bytes;
|
|
};
|
|
|
|
struct sg_dma_desc_info {
|
|
void *virt;
|
|
dma_addr_t bus;
|
|
unsigned size;
|
|
void *last_desc_virt;
|
|
struct device *dev;
|
|
};
|
|
|
|
#define COBALT_MAX_WIDTH 1920
|
|
#define COBALT_MAX_HEIGHT 1200
|
|
#define COBALT_MAX_BPP 3
|
|
#define COBALT_MAX_FRAMESZ \
|
|
(COBALT_MAX_WIDTH * COBALT_MAX_HEIGHT * COBALT_MAX_BPP)
|
|
|
|
#define NR_BUFS VIDEO_MAX_FRAME
|
|
|
|
#define COBALT_STREAM_FL_DMA_IRQ 0
|
|
#define COBALT_STREAM_FL_ADV_IRQ 1
|
|
|
|
struct cobalt_buffer {
|
|
struct vb2_v4l2_buffer vb;
|
|
struct list_head list;
|
|
};
|
|
|
|
static inline
|
|
struct cobalt_buffer *to_cobalt_buffer(struct vb2_v4l2_buffer *vb2)
|
|
{
|
|
return container_of(vb2, struct cobalt_buffer, vb);
|
|
}
|
|
|
|
struct cobalt_stream {
|
|
struct video_device vdev;
|
|
struct vb2_queue q;
|
|
struct list_head bufs;
|
|
struct i2c_adapter *i2c_adap;
|
|
struct v4l2_subdev *sd;
|
|
struct mutex lock;
|
|
spinlock_t irqlock;
|
|
struct v4l2_dv_timings timings;
|
|
u32 input;
|
|
u32 pad_source;
|
|
u32 width, height, bpp;
|
|
u32 stride;
|
|
u32 pixfmt;
|
|
u32 sequence;
|
|
u32 colorspace;
|
|
u32 xfer_func;
|
|
u32 ycbcr_enc;
|
|
u32 quantization;
|
|
|
|
u8 dma_channel;
|
|
int video_channel;
|
|
unsigned dma_fifo_mask;
|
|
unsigned adv_irq_mask;
|
|
struct sg_dma_desc_info dma_desc_info[NR_BUFS];
|
|
unsigned long flags;
|
|
bool unstable_frame;
|
|
bool enable_cvi;
|
|
bool enable_freewheel;
|
|
unsigned skip_first_frames;
|
|
bool is_output;
|
|
bool is_audio;
|
|
bool is_dummy;
|
|
|
|
struct cobalt *cobalt;
|
|
struct snd_cobalt_card *alsa;
|
|
};
|
|
|
|
struct snd_cobalt_card;
|
|
|
|
/* Struct to hold info about cobalt cards */
|
|
struct cobalt {
|
|
int instance;
|
|
struct pci_dev *pci_dev;
|
|
struct v4l2_device v4l2_dev;
|
|
/* serialize PCI access in cobalt_s_bit_sysctrl() */
|
|
struct mutex pci_lock;
|
|
|
|
void __iomem *bar0, *bar1;
|
|
|
|
u8 card_rev;
|
|
u16 device_id;
|
|
|
|
/* device nodes */
|
|
struct cobalt_stream streams[DMA_CHANNELS_MAX];
|
|
struct i2c_adapter i2c_adap[COBALT_NUM_ADAPTERS];
|
|
struct cobalt_i2c_data i2c_data[COBALT_NUM_ADAPTERS];
|
|
bool have_hsma_rx;
|
|
bool have_hsma_tx;
|
|
|
|
/* irq */
|
|
struct workqueue_struct *irq_work_queues;
|
|
struct work_struct irq_work_queue; /* work entry */
|
|
/* irq counters */
|
|
u32 irq_adv1;
|
|
u32 irq_adv2;
|
|
u32 irq_advout;
|
|
u32 irq_dma_tot;
|
|
u32 irq_dma[COBALT_NUM_STREAMS];
|
|
u32 irq_none;
|
|
u32 irq_full_fifo;
|
|
|
|
bool msi_enabled;
|
|
|
|
/* omnitek dma */
|
|
int dma_channels;
|
|
int first_fifo_channel;
|
|
bool pci_32_bit;
|
|
|
|
char hdl_info[COBALT_HDL_INFO_SIZE];
|
|
|
|
/* NOR flash */
|
|
struct mtd_info *mtd;
|
|
};
|
|
|
|
static inline struct cobalt *to_cobalt(struct v4l2_device *v4l2_dev)
|
|
{
|
|
return container_of(v4l2_dev, struct cobalt, v4l2_dev);
|
|
}
|
|
|
|
static inline void cobalt_write_bar0(struct cobalt *cobalt, u32 reg, u32 val)
|
|
{
|
|
iowrite32(val, cobalt->bar0 + reg);
|
|
}
|
|
|
|
static inline u32 cobalt_read_bar0(struct cobalt *cobalt, u32 reg)
|
|
{
|
|
return ioread32(cobalt->bar0 + reg);
|
|
}
|
|
|
|
static inline void cobalt_write_bar1(struct cobalt *cobalt, u32 reg, u32 val)
|
|
{
|
|
iowrite32(val, cobalt->bar1 + reg);
|
|
}
|
|
|
|
static inline u32 cobalt_read_bar1(struct cobalt *cobalt, u32 reg)
|
|
{
|
|
return ioread32(cobalt->bar1 + reg);
|
|
}
|
|
|
|
static inline u32 cobalt_g_sysctrl(struct cobalt *cobalt)
|
|
{
|
|
return cobalt_read_bar1(cobalt, COBALT_SYS_CTRL_BASE);
|
|
}
|
|
|
|
static inline void cobalt_s_bit_sysctrl(struct cobalt *cobalt,
|
|
int bit, int val)
|
|
{
|
|
u32 ctrl;
|
|
|
|
mutex_lock(&cobalt->pci_lock);
|
|
ctrl = cobalt_read_bar1(cobalt, COBALT_SYS_CTRL_BASE);
|
|
cobalt_write_bar1(cobalt, COBALT_SYS_CTRL_BASE,
|
|
(ctrl & ~(1UL << bit)) | (val << bit));
|
|
mutex_unlock(&cobalt->pci_lock);
|
|
}
|
|
|
|
static inline u32 cobalt_g_sysstat(struct cobalt *cobalt)
|
|
{
|
|
return cobalt_read_bar1(cobalt, COBALT_SYS_STAT_BASE);
|
|
}
|
|
|
|
#define ADRS_REG (bar1 + COBALT_BUS_BAR1_BASE + 0)
|
|
#define LOWER_DATA (bar1 + COBALT_BUS_BAR1_BASE + 4)
|
|
#define UPPER_DATA (bar1 + COBALT_BUS_BAR1_BASE + 6)
|
|
|
|
static inline u32 cobalt_bus_read32(void __iomem *bar1, u32 bus_adrs)
|
|
{
|
|
iowrite32(bus_adrs, ADRS_REG);
|
|
return ioread32(LOWER_DATA);
|
|
}
|
|
|
|
static inline void cobalt_bus_write16(void __iomem *bar1,
|
|
u32 bus_adrs, u16 data)
|
|
{
|
|
iowrite32(bus_adrs, ADRS_REG);
|
|
if (bus_adrs & 2)
|
|
iowrite16(data, UPPER_DATA);
|
|
else
|
|
iowrite16(data, LOWER_DATA);
|
|
}
|
|
|
|
static inline void cobalt_bus_write32(void __iomem *bar1,
|
|
u32 bus_adrs, u16 data)
|
|
{
|
|
iowrite32(bus_adrs, ADRS_REG);
|
|
if (bus_adrs & 2)
|
|
iowrite32(data, UPPER_DATA);
|
|
else
|
|
iowrite32(data, LOWER_DATA);
|
|
}
|
|
|
|
/*==============Prototypes==================*/
|
|
|
|
void cobalt_pcie_status_show(struct cobalt *cobalt);
|
|
|
|
#endif
|