190 lines
4.0 KiB
C
190 lines
4.0 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* rockchip-rkx111.c -- I2C register interface access for rkx111 serdes chip
|
|
*
|
|
* Copyright (c) 2023-2028 Rockchip Electronics Co., Ltd.
|
|
*
|
|
* Author: luowei <lw@rock-chips.com>
|
|
*/
|
|
|
|
#include "../core.h"
|
|
|
|
static bool rkx111_volatile_reg(struct device *dev, unsigned int reg)
|
|
{
|
|
switch (reg) {
|
|
case 0x0076:
|
|
case 0x0086:
|
|
case 0x0100:
|
|
case 0x0200 ... 0x02ce:
|
|
case 0x7000:
|
|
case 0x7070:
|
|
case 0x7074:
|
|
return false;
|
|
default:
|
|
return true;
|
|
}
|
|
}
|
|
|
|
static struct regmap_config rkx111_regmap_config = {
|
|
.name = "rkx111",
|
|
.reg_bits = 16,
|
|
.val_bits = 8,
|
|
.max_register = 0x8000,
|
|
.volatile_reg = rkx111_volatile_reg,
|
|
.cache_type = REGCACHE_RBTREE,
|
|
};
|
|
|
|
struct pinctrl_pin_desc rkx111_pins_desc[] = {
|
|
};
|
|
|
|
struct group_desc rkx111_groups_desc[] = {
|
|
{ "null", NULL, 1, },
|
|
};
|
|
|
|
struct function_desc rkx111_functions_desc[] = {
|
|
{ "null", NULL, 1, },
|
|
};
|
|
|
|
static struct serdes_chip_pinctrl_info rkx111_pinctrl_info = {
|
|
.pins = rkx111_pins_desc,
|
|
.num_pins = ARRAY_SIZE(rkx111_pins_desc),
|
|
.groups = rkx111_groups_desc,
|
|
.num_groups = ARRAY_SIZE(rkx111_groups_desc),
|
|
.functions = rkx111_functions_desc,
|
|
.num_functions = ARRAY_SIZE(rkx111_functions_desc),
|
|
};
|
|
|
|
static int rkx111_bridge_init(struct serdes *serdes)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx111_bridge_enable(struct serdes *serdes)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx111_bridge_disable(struct serdes *serdes)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static struct serdes_chip_bridge_ops rkx111_bridge_ops = {
|
|
.init = rkx111_bridge_init,
|
|
.enable = rkx111_bridge_enable,
|
|
.disable = rkx111_bridge_disable,
|
|
};
|
|
|
|
static int rkx111_pinctrl_config_get(struct serdes *serdes,
|
|
unsigned int pin,
|
|
unsigned long *config)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx111_pinctrl_config_set(struct serdes *serdes,
|
|
unsigned int pin,
|
|
unsigned long *configs,
|
|
unsigned int num_configs)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx111_pinctrl_set_mux(struct serdes *serdes, unsigned int func_selector,
|
|
unsigned int group_selector)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static struct serdes_chip_pinctrl_ops rkx111_pinctrl_ops = {
|
|
.pin_config_get = rkx111_pinctrl_config_get,
|
|
.pin_config_set = rkx111_pinctrl_config_set,
|
|
.set_mux = rkx111_pinctrl_set_mux,
|
|
};
|
|
|
|
static int rkx111_gpio_direction_input(struct serdes *serdes, int gpio)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx111_gpio_direction_output(struct serdes *serdes, int gpio, int value)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx111_gpio_get_level(struct serdes *serdes, int gpio)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx111_gpio_set_level(struct serdes *serdes, int gpio, int value)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx111_gpio_set_config(struct serdes *serdes, int gpio, unsigned long config)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx111_gpio_to_irq(struct serdes *serdes, int gpio)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static struct serdes_chip_gpio_ops rkx111_gpio_ops = {
|
|
.direction_input = rkx111_gpio_direction_input,
|
|
.direction_output = rkx111_gpio_direction_output,
|
|
.get_level = rkx111_gpio_get_level,
|
|
.set_level = rkx111_gpio_set_level,
|
|
.set_config = rkx111_gpio_set_config,
|
|
.to_irq = rkx111_gpio_to_irq,
|
|
};
|
|
|
|
static int rkx111_pm_suspend(struct serdes *serdes)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx111_pm_resume(struct serdes *serdes)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static struct serdes_chip_pm_ops rkx111_pm_ops = {
|
|
.suspend = rkx111_pm_suspend,
|
|
.resume = rkx111_pm_resume,
|
|
};
|
|
|
|
static int rkx111_irq_lock_handle(struct serdes *serdes)
|
|
{
|
|
return IRQ_HANDLED;
|
|
}
|
|
|
|
static int rkx111_irq_err_handle(struct serdes *serdes)
|
|
{
|
|
return IRQ_HANDLED;
|
|
}
|
|
|
|
static struct serdes_chip_irq_ops rkx111_irq_ops = {
|
|
.lock_handle = rkx111_irq_lock_handle,
|
|
.err_handle = rkx111_irq_err_handle,
|
|
};
|
|
|
|
struct serdes_chip_data serdes_rkx111_data = {
|
|
.name = "rkx111",
|
|
.serdes_type = TYPE_SER,
|
|
.serdes_id = ROCKCHIP_ID_RKX111,
|
|
.connector_type = DRM_MODE_CONNECTOR_DSI,
|
|
.regmap_config = &rkx111_regmap_config,
|
|
.pinctrl_info = &rkx111_pinctrl_info,
|
|
.bridge_ops = &rkx111_bridge_ops,
|
|
.pinctrl_ops = &rkx111_pinctrl_ops,
|
|
.gpio_ops = &rkx111_gpio_ops,
|
|
.pm_ops = &rkx111_pm_ops,
|
|
.irq_ops = &rkx111_irq_ops,
|
|
};
|
|
EXPORT_SYMBOL_GPL(serdes_rkx111_data);
|
|
|
|
MODULE_LICENSE("GPL");
|