linux/drivers/pinctrl/bcm/pinctrl-cygnus-mux.c

// SPDX-License-Identifier: GPL-2.0-only
// Copyright (C) 2014-2017 Broadcom

/*
 * Broadcom Cygnus IOMUX driver
 *
 * This file contains the Cygnus IOMUX driver that supports group based PINMUX
 * configuration. Although PINMUX configuration is mainly group based, the
 * Cygnus IOMUX controller allows certain pins to be individually muxed to GPIO
 * function, and therefore be controlled by the Cygnus ASIU GPIO controller
 */

#include <linux/err.h>
#include <linux/io.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/seq_file.h>
#include <linux/slab.h>

#include <linux/pinctrl/pinconf-generic.h>
#include <linux/pinctrl/pinconf.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/pinctrl/pinmux.h>

#include "../core.h"
#include "../pinctrl-utils.h"

#define CYGNUS_NUM_IOMUX_REGS
#define CYGNUS_NUM_MUX_PER_REG
#define CYGNUS_NUM_IOMUX

/*
 * Cygnus IOMUX register description
 *
 * @offset: register offset for mux configuration of a group
 * @shift: bit shift for mux configuration of a group
 * @alt: alternate function to set to
 */
struct cygnus_mux {};

/*
 * Keep track of Cygnus IOMUX configuration and prevent double configuration
 *
 * @cygnus_mux: Cygnus IOMUX register description
 * @is_configured: flag to indicate whether a mux setting has already been
 * configured
 */
struct cygnus_mux_log {};

/*
 * Group based IOMUX configuration
 *
 * @name: name of the group
 * @pins: array of pins used by this group
 * @num_pins: total number of pins used by this group
 * @mux: Cygnus group based IOMUX configuration
 */
struct cygnus_pin_group {};

/*
 * Cygnus mux function and supported pin groups
 *
 * @name: name of the function
 * @groups: array of groups that can be supported by this function
 * @num_groups: total number of groups that can be supported by this function
 */
struct cygnus_pin_function {};

/*
 * Cygnus IOMUX pinctrl core
 *
 * @pctl: pointer to pinctrl_dev
 * @dev: pointer to device
 * @base0: first I/O register base of the Cygnus IOMUX controller
 * @base1: second I/O register base
 * @groups: pointer to array of groups
 * @num_groups: total number of groups
 * @functions: pointer to array of functions
 * @num_functions: total number of functions
 * @mux_log: pointer to the array of mux logs
 * @lock: lock to protect register access
 */
struct cygnus_pinctrl {};

/*
 * Certain pins can be individually muxed to GPIO function
 *
 * @is_supported: flag to indicate GPIO mux is supported for this pin
 * @offset: register offset for GPIO mux override of a pin
 * @shift: bit shift for GPIO mux override of a pin
 */
struct cygnus_gpio_mux {};

/*
 * Description of a pin in Cygnus
 *
 * @pin: pin number
 * @name: pin name
 * @gpio_mux: GPIO override related information
 */
struct cygnus_pin {};

#define CYGNUS_PIN_DESC(p, n, i, o, s)

/*
 * List of pins in Cygnus
 */
static struct cygnus_pin cygnus_pins[] =;

/*
 * List of groups of pins
 */
static const unsigned bsc1_pins[] =;
static const unsigned pcie_clkreq_pins[] =;

static const unsigned i2s2_0_pins[] =;
static const unsigned i2s2_1_pins[] =;
static const unsigned i2s2_2_pins[] =;
static const unsigned i2s2_3_pins[] =;
static const unsigned i2s2_4_pins[] =;

static const unsigned pwm4_pins[] =;
static const unsigned pwm5_pins[] =;

static const unsigned key0_pins[] =;
static const unsigned key1_pins[] =;
static const unsigned key2_pins[] =;
static const unsigned key3_pins[] =;
static const unsigned key4_pins[] =;
static const unsigned key5_pins[] =;

static const unsigned key6_pins[] =;
static const unsigned audio_dte0_pins[] =;

static const unsigned key7_pins[] =;
static const unsigned audio_dte1_pins[] =;

static const unsigned key8_pins[] =;
static const unsigned key9_pins[] =;
static const unsigned key10_pins[] =;
static const unsigned key11_pins[] =;
static const unsigned key12_pins[] =;
static const unsigned key13_pins[] =;

static const unsigned key14_pins[] =;
static const unsigned audio_dte2_pins[] =;

static const unsigned key15_pins[] =;
static const unsigned audio_dte3_pins[] =;

static const unsigned pwm0_pins[] =;
static const unsigned pwm1_pins[] =;
static const unsigned pwm2_pins[] =;
static const unsigned pwm3_pins[] =;

static const unsigned sdio0_pins[] =;

static const unsigned smart_card0_pins[] =;
static const unsigned i2s0_0_pins[] =;
static const unsigned spdif_pins[] =;

static const unsigned smart_card1_pins[] =;
static const unsigned i2s1_0_pins[] =;

static const unsigned spi0_pins[] =;

static const unsigned spi1_pins[] =;

static const unsigned spi2_pins[] =;

static const unsigned spi3_pins[] =;
static const unsigned sw_led0_0_pins[] =;

static const unsigned d1w_pins[] =;
static const unsigned uart4_pins[] =;
static const unsigned sw_led2_0_pins[] =;

static const unsigned lcd_pins[] =;
static const unsigned sram_0_pins[] =;
static const unsigned spi5_pins[] =;

static const unsigned uart0_pins[] =;
static const unsigned sw_led0_1_pins[] =;

static const unsigned uart1_dte_pins[] =;
static const unsigned uart2_pins[] =;

static const unsigned uart1_pins[] =;

static const unsigned uart3_pins[] =;

static const unsigned qspi_0_pins[] =;

static const unsigned nand_pins[] =;

static const unsigned sdio0_cd_pins[] =;

static const unsigned sdio0_mmc_pins[] =;

static const unsigned sdio1_data_0_pins[] =;
static const unsigned can0_pins[] =;
static const unsigned spi4_0_pins[] =;

static const unsigned sdio1_data_1_pins[] =;
static const unsigned can1_pins[] =;
static const unsigned spi4_1_pins[] =;

static const unsigned sdio1_cd_pins[] =;

static const unsigned sdio1_led_pins[] =;
static const unsigned sw_led2_1_pins[] =;

static const unsigned sdio1_mmc_pins[] =;

static const unsigned cam_led_pins[] =;
static const unsigned sw_led1_pins[] =;

static const unsigned cam_0_pins[] =;

static const unsigned cam_1_pins[] =;
static const unsigned sram_1_pins[] =;

static const unsigned qspi_1_pins[] =;

static const unsigned smart_card0_fcb_pins[] =;
static const unsigned i2s0_1_pins[] =;

static const unsigned smart_card1_fcb_pins[] =;
static const unsigned i2s1_1_pins[] =;

static const unsigned gpio0_3p3_pins[] =;
static const unsigned usb0_oc_pins[] =;

static const unsigned gpio1_3p3_pins[] =;
static const unsigned usb1_oc_pins[] =;

static const unsigned gpio2_3p3_pins[] =;
static const unsigned usb2_oc_pins[] =;

#define CYGNUS_PIN_GROUP(group_name, off, sh, al)

/*
 * List of Cygnus pin groups
 */
static const struct cygnus_pin_group cygnus_pin_groups[] =;

/*
 * List of groups supported by functions
 */
static const char * const i2s0_grps[] =;
static const char * const i2s1_grps[] =;
static const char * const i2s2_grps[] =;
static const char * const spdif_grps[] =;
static const char * const pwm0_grps[] =;
static const char * const pwm1_grps[] =;
static const char * const pwm2_grps[] =;
static const char * const pwm3_grps[] =;
static const char * const pwm4_grps[] =;
static const char * const pwm5_grps[] =;
static const char * const key_grps[] =;
static const char * const audio_dte_grps[] =;
static const char * const smart_card0_grps[] =;
static const char * const smart_card1_grps[] =;
static const char * const spi0_grps[] =;
static const char * const spi1_grps[] =;
static const char * const spi2_grps[] =;
static const char * const spi3_grps[] =;
static const char * const spi4_grps[] =;
static const char * const spi5_grps[] =;

static const char * const sw_led0_grps[] =;
static const char * const sw_led1_grps[] =;
static const char * const sw_led2_grps[] =;
static const char * const d1w_grps[] =;
static const char * const lcd_grps[] =;
static const char * const sram_grps[] =;

static const char * const uart0_grps[] =;
static const char * const uart1_grps[] =;
static const char * const uart2_grps[] =;
static const char * const uart3_grps[] =;
static const char * const uart4_grps[] =;
static const char * const qspi_grps[] =;
static const char * const nand_grps[] =;
static const char * const sdio0_grps[] =;
static const char * const sdio1_grps[] =;
static const char * const can0_grps[] =;
static const char * const can1_grps[] =;
static const char * const cam_grps[] =;
static const char * const bsc1_grps[] =;
static const char * const pcie_clkreq_grps[] =;
static const char * const usb0_oc_grps[] =;
static const char * const usb1_oc_grps[] =;
static const char * const usb2_oc_grps[] =;

#define CYGNUS_PIN_FUNCTION(func)

/*
 * List of supported functions in Cygnus
 */
static const struct cygnus_pin_function cygnus_pin_functions[] =;

static int cygnus_get_groups_count(struct pinctrl_dev *pctrl_dev)
{}

static const char *cygnus_get_group_name(struct pinctrl_dev *pctrl_dev,
					 unsigned selector)
{}

static int cygnus_get_group_pins(struct pinctrl_dev *pctrl_dev,
				 unsigned selector, const unsigned **pins,
				 unsigned *num_pins)
{}

static void cygnus_pin_dbg_show(struct pinctrl_dev *pctrl_dev,
				struct seq_file *s, unsigned offset)
{}

static const struct pinctrl_ops cygnus_pinctrl_ops =;

static int cygnus_get_functions_count(struct pinctrl_dev *pctrl_dev)
{}

static const char *cygnus_get_function_name(struct pinctrl_dev *pctrl_dev,
					    unsigned selector)
{}

static int cygnus_get_function_groups(struct pinctrl_dev *pctrl_dev,
				      unsigned selector,
				      const char * const **groups,
				      unsigned * const num_groups)
{}

static int cygnus_pinmux_set(struct cygnus_pinctrl *pinctrl,
			     const struct cygnus_pin_function *func,
			     const struct cygnus_pin_group *grp,
			     struct cygnus_mux_log *mux_log)
{}

static int cygnus_pinmux_set_mux(struct pinctrl_dev *pctrl_dev,
				 unsigned func_select, unsigned grp_select)
{}

static int cygnus_gpio_request_enable(struct pinctrl_dev *pctrl_dev,
				      struct pinctrl_gpio_range *range,
				      unsigned pin)
{}

static void cygnus_gpio_disable_free(struct pinctrl_dev *pctrl_dev,
				     struct pinctrl_gpio_range *range,
				     unsigned pin)
{}

static const struct pinmux_ops cygnus_pinmux_ops =;

static struct pinctrl_desc cygnus_pinctrl_desc =;

static int cygnus_mux_log_init(struct cygnus_pinctrl *pinctrl)
{}

static int cygnus_pinmux_probe(struct platform_device *pdev)
{}

static const struct of_device_id cygnus_pinmux_of_match[] =;

static struct platform_driver cygnus_pinmux_driver =;

static int __init cygnus_pinmux_init(void)
{}
arch_initcall(cygnus_pinmux_init);