190 lines
4.0 KiB
C
190 lines
4.0 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* rockchip-rkx121.c -- I2C register interface access for rkx121 serdes chip
|
|
*
|
|
* Copyright (c) 2023-2028 Rockchip Electronics Co., Ltd.
|
|
*
|
|
* Author: luowei <lw@rock-chips.com>
|
|
*/
|
|
|
|
#include "../core.h"
|
|
|
|
static bool rkx121_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 rkx121_regmap_config = {
|
|
.name = "rkx121",
|
|
.reg_bits = 16,
|
|
.val_bits = 8,
|
|
.max_register = 0x8000,
|
|
.volatile_reg = rkx121_volatile_reg,
|
|
.cache_type = REGCACHE_RBTREE,
|
|
};
|
|
|
|
static struct pinctrl_pin_desc rkx121_pins_desc[] = {
|
|
};
|
|
|
|
static struct group_desc rkx121_groups_desc[] = {
|
|
{ "null", NULL, 1, },
|
|
};
|
|
|
|
static struct function_desc rkx121_functions_desc[] = {
|
|
{ "null", NULL, 1, },
|
|
};
|
|
|
|
static struct serdes_chip_pinctrl_info rkx121_pinctrl_info = {
|
|
.pins = rkx121_pins_desc,
|
|
.num_pins = ARRAY_SIZE(rkx121_pins_desc),
|
|
.groups = rkx121_groups_desc,
|
|
.num_groups = ARRAY_SIZE(rkx121_groups_desc),
|
|
.functions = rkx121_functions_desc,
|
|
.num_functions = ARRAY_SIZE(rkx121_functions_desc),
|
|
};
|
|
|
|
static int rkx121_bridge_init(struct serdes *serdes)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx121_bridge_enable(struct serdes *serdes)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx121_bridge_disable(struct serdes *serdes)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static struct serdes_chip_panel_ops rkx121_panel_ops = {
|
|
.init = rkx121_bridge_init,
|
|
.enable = rkx121_bridge_enable,
|
|
.disable = rkx121_bridge_disable,
|
|
};
|
|
|
|
static int rkx121_pinctrl_config_get(struct serdes *serdes,
|
|
unsigned int pin,
|
|
unsigned long *config)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx121_pinctrl_config_set(struct serdes *serdes,
|
|
unsigned int pin,
|
|
unsigned long *configs,
|
|
unsigned int num_configs)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx121_pinctrl_set_mux(struct serdes *serdes, unsigned int func_selector,
|
|
unsigned int group_selector)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static struct serdes_chip_pinctrl_ops rkx121_pinctrl_ops = {
|
|
.pin_config_get = rkx121_pinctrl_config_get,
|
|
.pin_config_set = rkx121_pinctrl_config_set,
|
|
.set_mux = rkx121_pinctrl_set_mux,
|
|
};
|
|
|
|
static int rkx121_gpio_direction_input(struct serdes *serdes, int gpio)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx121_gpio_direction_output(struct serdes *serdes, int gpio, int value)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx121_gpio_get_level(struct serdes *serdes, int gpio)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx121_gpio_set_level(struct serdes *serdes, int gpio, int value)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx121_gpio_set_config(struct serdes *serdes, int gpio, unsigned long config)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx121_gpio_to_irq(struct serdes *serdes, int gpio)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static struct serdes_chip_gpio_ops rkx121_gpio_ops = {
|
|
.direction_input = rkx121_gpio_direction_input,
|
|
.direction_output = rkx121_gpio_direction_output,
|
|
.get_level = rkx121_gpio_get_level,
|
|
.set_level = rkx121_gpio_set_level,
|
|
.set_config = rkx121_gpio_set_config,
|
|
.to_irq = rkx121_gpio_to_irq,
|
|
};
|
|
|
|
static int rkx121_pm_suspend(struct serdes *serdes)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int rkx121_pm_resume(struct serdes *serdes)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static struct serdes_chip_pm_ops rkx121_pm_ops = {
|
|
.suspend = rkx121_pm_suspend,
|
|
.resume = rkx121_pm_resume,
|
|
};
|
|
|
|
static int rkx121_irq_lock_handle(struct serdes *serdes)
|
|
{
|
|
return IRQ_HANDLED;
|
|
}
|
|
|
|
static int rkx121_irq_err_handle(struct serdes *serdes)
|
|
{
|
|
return IRQ_HANDLED;
|
|
}
|
|
|
|
static struct serdes_chip_irq_ops rkx121_irq_ops = {
|
|
.lock_handle = rkx121_irq_lock_handle,
|
|
.err_handle = rkx121_irq_err_handle,
|
|
};
|
|
|
|
struct serdes_chip_data serdes_rkx121_data = {
|
|
.name = "rkx121",
|
|
.serdes_type = TYPE_DES,
|
|
.serdes_id = ROCKCHIP_ID_RKX121,
|
|
.connector_type = DRM_MODE_CONNECTOR_LVDS,
|
|
.regmap_config = &rkx121_regmap_config,
|
|
.pinctrl_info = &rkx121_pinctrl_info,
|
|
.panel_ops = &rkx121_panel_ops,
|
|
.pinctrl_ops = &rkx121_pinctrl_ops,
|
|
.gpio_ops = &rkx121_gpio_ops,
|
|
.pm_ops = &rkx121_pm_ops,
|
|
.irq_ops = &rkx121_irq_ops,
|
|
};
|
|
EXPORT_SYMBOL_GPL(serdes_rkx121_data);
|
|
|
|
MODULE_LICENSE("GPL");
|