diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi index b13208797352..21a1c8a73511 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi @@ -378,6 +378,7 @@ <&u2phy0>; phys = <&u2phy0_host>; phy-names = "usb"; + power-domains = <&power RK3399_PD_PERIHP>; status = "disabled"; }; @@ -389,6 +390,7 @@ <&u2phy0>; phys = <&u2phy0_host>; phy-names = "usb"; + power-domains = <&power RK3399_PD_PERIHP>; status = "disabled"; }; @@ -400,6 +402,7 @@ <&u2phy1>; phys = <&u2phy1_host>; phy-names = "usb"; + power-domains = <&power RK3399_PD_PERIHP>; status = "disabled"; }; @@ -411,6 +414,7 @@ <&u2phy1>; phys = <&u2phy1_host>; phy-names = "usb"; + power-domains = <&power RK3399_PD_PERIHP>; status = "disabled"; }; diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 3d303ea4bb81..4c2f0fd588ae 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -4883,6 +4883,15 @@ static int vop2_plane_atomic_check(struct drm_plane *plane, struct drm_atomic_st } } + if (vp->vop2->version == VOP_VERSION_RK3588) { + if (!vpstate->afbc_en && + (fb->format->format == DRM_FORMAT_XRGB2101010 || + fb->format->format == DRM_FORMAT_XBGR2101010)) { + DRM_ERROR("RK3588 unsupported linear XRGB2101010 at %s\n", win->name); + return -EINVAL; + } + } + if (vp->vop2->version > VOP_VERSION_RK3568) { if (vop2_cluster_window(win) && !vpstate->afbc_en && fb->format->is_yuv && !is_vop3(vop2)) { DRM_ERROR("Unsupported linear yuv format at %s\n", win->name); @@ -7737,7 +7746,8 @@ static void vop3_setup_pipe_dly(struct vop2_video_port *vp, const struct vop2_zp sdr_win_dly = 0; } - pre_scan_dly = bg_dly + (hdisplay >> 1) - 1; + /* hdisplay must roundup as 2 pixel */ + pre_scan_dly = bg_dly + (roundup(hdisplay, 2) >> 1) - 1; pre_scan_dly = (pre_scan_dly << 16) | hsync_len; VOP_MODULE_SET(vop2, vp, bg_dly, bg_dly); VOP_MODULE_SET(vop2, vp, pre_scan_htiming, pre_scan_dly); @@ -9305,10 +9315,14 @@ static void vop2_setup_dly_for_vp(struct vop2_video_port *vp) hdisplay = adjusted_mode->crtc_hdisplay; } + /* + * splice mode: hdisplay must roundup as 4 pixel, + * no splice mode: hdisplay must roundup as 2 pixel. + */ if (vcstate->splice_mode) - pre_scan_dly = bg_dly + (hdisplay >> 2) - 1; + pre_scan_dly = bg_dly + (roundup(hdisplay, 4) >> 2) - 1; else - pre_scan_dly = bg_dly + (hdisplay >> 1) - 1; + pre_scan_dly = bg_dly + (roundup(hdisplay, 2) >> 1) - 1; if (vop2->version == VOP_VERSION_RK3588 && hsync_len < 8) hsync_len = 8; diff --git a/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c index 9854a23f545b..e973036cc806 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c @@ -32,9 +32,7 @@ static const uint32_t formats_for_cluster[] = { DRM_FORMAT_XRGB2101010, - DRM_FORMAT_ARGB2101010, DRM_FORMAT_XBGR2101010, - DRM_FORMAT_ABGR2101010, DRM_FORMAT_XRGB8888, DRM_FORMAT_ARGB8888, DRM_FORMAT_XBGR8888, diff --git a/drivers/media/i2c/maxim/remote/max9295.c b/drivers/media/i2c/maxim/remote/max9295.c index 9501dfc88d5d..ea3d20bc47dc 100644 --- a/drivers/media/i2c/maxim/remote/max9295.c +++ b/drivers/media/i2c/maxim/remote/max9295.c @@ -18,7 +18,7 @@ #define DRIVER_VERSION KERNEL_VERSION(3, 0x01, 0x00) -#define MAX9295_NAME "max9295" +#define MAX9295_NAME "maxim-max9295" #define MAX9295_I2C_ADDR_DEF 0x40 @@ -456,6 +456,8 @@ static int max9295_module_init(maxim_remote_ser_t *max9295) return ret; } + max9295->ser_state = MAXIM_REMOTE_SER_INIT; + return 0; } @@ -468,6 +470,8 @@ static int max9295_module_deinit(maxim_remote_ser_t *max9295) #endif ret |= max9295_soft_power_down(max9295); + max9295->ser_state = MAXIM_REMOTE_SER_DEINIT; + return ret; } @@ -515,6 +519,7 @@ static int max9295_probe(struct i2c_client *client, max9295->client = client; max9295->ser_i2c_addr_map = client->addr; max9295->ser_ops = &max9295_ser_ops; + max9295->ser_state = MAXIM_REMOTE_SER_DEINIT; i2c_set_clientdata(client, max9295); @@ -537,6 +542,8 @@ static void max9295_remove(struct i2c_client *client) mutex_destroy(&max9295->mutex); + max9295->ser_state = MAXIM_REMOTE_SER_DEINIT; + #if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE return 0; #endif diff --git a/drivers/media/i2c/maxim/remote/max96715.c b/drivers/media/i2c/maxim/remote/max96715.c index fc6a6cf0ddbf..1d568468b9b5 100644 --- a/drivers/media/i2c/maxim/remote/max96715.c +++ b/drivers/media/i2c/maxim/remote/max96715.c @@ -18,7 +18,7 @@ #define DRIVER_VERSION KERNEL_VERSION(3, 0x01, 0x00) -#define MAX96715_NAME "max96715" +#define MAX96715_NAME "maxim-max96715" #define MAX96715_I2C_ADDR_DEF 0x40 @@ -457,6 +457,8 @@ static int max96715_module_init(maxim_remote_ser_t *max96715) return ret; #endif + max96715->ser_state = MAXIM_REMOTE_SER_INIT; + return 0; } @@ -469,6 +471,8 @@ static int max96715_module_deinit(maxim_remote_ser_t *max96715) #endif ret |= max96715_soft_power_down(max96715); + max96715->ser_state = MAXIM_REMOTE_SER_DEINIT; + return ret; } @@ -516,6 +520,7 @@ static int max96715_probe(struct i2c_client *client, max96715->client = client; max96715->ser_i2c_addr_map = client->addr; max96715->ser_ops = &max96715_ser_ops; + max96715->ser_state = MAXIM_REMOTE_SER_DEINIT; i2c_set_clientdata(client, max96715); @@ -538,6 +543,8 @@ static void max96715_remove(struct i2c_client *client) mutex_destroy(&max96715->mutex); + max96715->ser_state = MAXIM_REMOTE_SER_DEINIT; + #if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE return 0; #endif diff --git a/drivers/media/i2c/maxim/remote/max96717.c b/drivers/media/i2c/maxim/remote/max96717.c index c2a19887ea37..209f8b4c0d06 100644 --- a/drivers/media/i2c/maxim/remote/max96717.c +++ b/drivers/media/i2c/maxim/remote/max96717.c @@ -409,6 +409,8 @@ static int max96717_module_init(maxim_remote_ser_t *max96717) return ret; } + max96717->ser_state = MAXIM_REMOTE_SER_INIT; + return 0; } @@ -418,6 +420,8 @@ static int max96717_module_deinit(maxim_remote_ser_t *max96717) ret |= max96717_i2c_addr_def(max96717); + max96717->ser_state = MAXIM_REMOTE_SER_DEINIT; + return ret; } @@ -465,6 +469,7 @@ static int max96717_probe(struct i2c_client *client, max96717->client = client; max96717->ser_i2c_addr_map = client->addr; max96717->ser_ops = &max96717_ser_ops; + max96717->ser_state = MAXIM_REMOTE_SER_DEINIT; i2c_set_clientdata(client, max96717); @@ -487,6 +492,8 @@ static void max96717_remove(struct i2c_client *client) mutex_destroy(&max96717->mutex); + max96717->ser_state = MAXIM_REMOTE_SER_DEINIT; + #if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE return 0; #endif diff --git a/drivers/media/i2c/maxim/remote/maxim_remote.h b/drivers/media/i2c/maxim/remote/maxim_remote.h index 8a79df354ed1..692871d81e0e 100644 --- a/drivers/media/i2c/maxim/remote/maxim_remote.h +++ b/drivers/media/i2c/maxim/remote/maxim_remote.h @@ -25,6 +25,10 @@ enum rkmodule_pad_type { #endif #endif /* LINUX_VERSION_CODE */ +/* Serializer State */ +#define MAXIM_REMOTE_SER_DEINIT 0 +#define MAXIM_REMOTE_SER_INIT 1 + /* I2C Device ID */ enum { MAXIM_REMOTE_I2C_SER_DEF, /* Serializer I2C address: Default */ @@ -76,6 +80,7 @@ typedef struct maxim_remote_ser { u8 cam_i2c_addr_def; u8 cam_i2c_addr_map; + u32 ser_state; struct maxim_remote_init_seq ser_init_seq; const struct maxim_remote_ser_ops *ser_ops; } maxim_remote_ser_t; @@ -325,4 +330,11 @@ static inline struct maxim_remote_ser *maxim_remote_cam_bind_ser(struct device * } } +static inline bool maxim_remote_ser_is_inited(maxim_remote_ser_t *remote_ser) +{ + if (remote_ser && (remote_ser->ser_state == MAXIM_REMOTE_SER_INIT)) + return true; + + return false; +} #endif /* __MAXIM_REMOTE_H__ */ diff --git a/drivers/media/i2c/rk628/rk628.c b/drivers/media/i2c/rk628/rk628.c index b3aaa731faa5..f5f9cfbab9ec 100644 --- a/drivers/media/i2c/rk628/rk628.c +++ b/drivers/media/i2c/rk628/rk628.c @@ -426,6 +426,7 @@ static void rk628_debugfs_register_create(struct rk628 *rk628) continue; debugfs_create_file(reg->name, 0600, dir, rk628, &rk628_reg_fops); } + rk628_hdmirx_phy_debugfs_register_create(rk628, dir); } void rk628_debugfs_create(struct rk628 *rk628) diff --git a/drivers/media/i2c/rk628/rk628_hdmirx.c b/drivers/media/i2c/rk628/rk628_hdmirx.c index e1533536a348..b9daaf5e7628 100644 --- a/drivers/media/i2c/rk628/rk628_hdmirx.c +++ b/drivers/media/i2c/rk628/rk628_hdmirx.c @@ -1518,3 +1518,71 @@ bool rk628_hdmirx_is_signal_change_ists(struct rk628 *rk628) return false; } EXPORT_SYMBOL(rk628_hdmirx_is_signal_change_ists); + +static int rk628_hdmirx_phy_reg_show(struct seq_file *s, void *v) +{ + struct rk628 *rk628 = s->private; + unsigned int i; + + seq_printf(s, "rk628_%s:\n", file_dentry(s->file)->d_iname); + + for (i = 0; i <= 0xb7; i++) + seq_printf(s, "0x%02x: %08x\n", i, hdmirxphy_read(rk628, i)); + + return 0; +} + +static ssize_t rk628_hdmirx_phy_reg_write(struct file *file, const char __user *buf, + size_t count, loff_t *ppos) +{ + struct rk628 *rk628 = file->f_path.dentry->d_inode->i_private; + u32 addr; + u32 val; + char kbuf[25]; + int ret; + + if (count >= sizeof(kbuf)) + return -ENOSPC; + + if (copy_from_user(kbuf, buf, count)) + return -EFAULT; + + kbuf[count] = '\0'; + + ret = sscanf(kbuf, "%x%x", &addr, &val); + if (ret != 2) + return -EINVAL; + + if (addr > 0xb7) + return -EINVAL; + + hdmirxphy_write(rk628, addr, val); + + return count; +} + +static int rk628_hdmirx_phy_reg_open(struct inode *inode, struct file *file) +{ + struct rk628 *rk628 = inode->i_private; + + return single_open(file, rk628_hdmirx_phy_reg_show, rk628); +} + +static const struct file_operations rk628_hdmirx_phy_reg_fops = { + .owner = THIS_MODULE, + .open = rk628_hdmirx_phy_reg_open, + .read = seq_read, + .write = rk628_hdmirx_phy_reg_write, + .llseek = seq_lseek, + .release = single_release, +}; +void rk628_hdmirx_phy_debugfs_register_create(struct rk628 *rk628, struct dentry *dir) +{ + if (rk628->version < RK628F_VERSION) + return; + if (IS_ERR(dir)) + return; + + debugfs_create_file("hdmirxphy", 0600, dir, rk628, &rk628_hdmirx_phy_reg_fops); +} +EXPORT_SYMBOL(rk628_hdmirx_phy_debugfs_register_create); diff --git a/drivers/media/i2c/rk628/rk628_hdmirx.h b/drivers/media/i2c/rk628/rk628_hdmirx.h index 3aed4642da39..43b159e387e0 100644 --- a/drivers/media/i2c/rk628/rk628_hdmirx.h +++ b/drivers/media/i2c/rk628/rk628_hdmirx.h @@ -523,4 +523,5 @@ void rk628_hdmirx_cec_unregister(struct rk628_hdmirx_cec *cec); void rk628_hdmirx_cec_hpd(struct rk628_hdmirx_cec *cec, bool en); void rk628_hdmirx_cec_state_reconfiguration(struct rk628 *rk628, struct rk628_hdmirx_cec *cec); +void rk628_hdmirx_phy_debugfs_register_create(struct rk628 *rk628, struct dentry *dir); #endif diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 61e69d22d7c6..88157f70272b 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -893,6 +893,10 @@ cif_input_fmt *rkcif_get_input_fmt(struct rkcif_device *dev, struct v4l2_rect *r if (ch_info.data_bit > 0) csi_info->data_bit = ch_info.data_bit; } + if (ch_info.field == 0) + fmt.format.field = V4L2_FIELD_NONE; + else + fmt.format.field = ch_info.field; } else { csi_info->vc = 0xff; } @@ -11357,6 +11361,7 @@ void rkcif_irq_pingpong(struct rkcif_device *cif_dev) wake_up(&stream->wq_stopped); continue; } + stream->buf_wake_up_cnt++; if (stream->state != RKCIF_STATE_STREAMING) continue; @@ -11501,6 +11506,7 @@ void rkcif_irq_pingpong(struct rkcif_device *cif_dev) wake_up(&stream->wq_stopped); return; } + stream->buf_wake_up_cnt++; frmid = CIF_GET_FRAME_ID(cif_frmst); if ((cif_frmst == 0xfffd0002) || (cif_frmst == 0xfffe0002)) { @@ -11570,6 +11576,7 @@ void rkcif_irq_pingpong(struct rkcif_device *cif_dev) wake_up(&stream->wq_stopped); continue; } + stream->buf_wake_up_cnt++; if (stream->state != RKCIF_STATE_STREAMING) continue; @@ -11678,6 +11685,7 @@ void rkcif_irq_lite_lvds(struct rkcif_device *cif_dev) if (stream->state != RKCIF_STATE_STREAMING) continue; + stream->buf_wake_up_cnt++; switch (mipi_id) { case RKCIF_STREAM_MIPI_ID0: stream->frame_phase = SW_FRM_END_ID0(intstat); diff --git a/drivers/misc/rk628/rk628_gpio.h b/drivers/misc/rk628/rk628_gpio.h index 5a61adbd1396..71674952c000 100644 --- a/drivers/misc/rk628/rk628_gpio.h +++ b/drivers/misc/rk628/rk628_gpio.h @@ -144,153 +144,4 @@ enum { PIN_MUX, }; -struct rk628_pin_iomux_group { - unsigned int pins; - int bank; - int mux; - int iomux_base; - int gpio_base; - int pull_reg; -}; - - -#define PINCTRL_GROUP(a, b, c, d, e, f) \ - {.pins = a, .bank = b, .mux = c, .iomux_base = d, .gpio_base = e, .pull_reg = f} - - -static const struct rk628_pin_iomux_group rk628_pin_iomux_groups[] = { - PINCTRL_GROUP(GPIO0_A0, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, - RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), - PINCTRL_GROUP(GPIO0_A1, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, - RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), - PINCTRL_GROUP(GPIO0_A2, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, RK628_GPIO0_BASE, 0), - PINCTRL_GROUP(GPIO0_A3, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, - RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), - PINCTRL_GROUP(GPIO0_A4, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, - RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), - PINCTRL_GROUP(GPIO0_A5, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, - RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), - PINCTRL_GROUP(GPIO0_A6, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, - RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), - PINCTRL_GROUP(GPIO0_A7, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, - RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), - PINCTRL_GROUP(GPIO0_B0, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, RK628_GPIO0_BASE, 0), - PINCTRL_GROUP(GPIO0_B1, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, RK628_GPIO0_BASE, 0), - PINCTRL_GROUP(GPIO0_B2, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, RK628_GPIO0_BASE, 0), - PINCTRL_GROUP(GPIO0_B3, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, RK628_GPIO0_BASE, 0), - - PINCTRL_GROUP(GPIO1_A0, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, - RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), - PINCTRL_GROUP(GPIO1_A1, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, - RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), - PINCTRL_GROUP(GPIO1_A2, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, - RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), - PINCTRL_GROUP(GPIO1_A3, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, - RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), - PINCTRL_GROUP(GPIO1_A4, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, - RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), - PINCTRL_GROUP(GPIO1_A5, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, - RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), - PINCTRL_GROUP(GPIO1_A6, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, - RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), - PINCTRL_GROUP(GPIO1_A7, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, - RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), - PINCTRL_GROUP(GPIO1_B0, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, RK628_GPIO1_BASE, 0), - PINCTRL_GROUP(GPIO1_B1, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, RK628_GPIO1_BASE, 0), - PINCTRL_GROUP(GPIO1_B2, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, RK628_GPIO1_BASE, 0), - PINCTRL_GROUP(GPIO1_B3, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, RK628_GPIO1_BASE, 0), - PINCTRL_GROUP(GPIO1_B4, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, RK628_GPIO1_BASE, 0), - PINCTRL_GROUP(GPIO1_B5, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, RK628_GPIO1_BASE, 0), - - PINCTRL_GROUP(GPIO2_A0, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), - PINCTRL_GROUP(GPIO2_A1, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), - PINCTRL_GROUP(GPIO2_A2, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), - PINCTRL_GROUP(GPIO2_A3, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), - PINCTRL_GROUP(GPIO2_A4, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), - PINCTRL_GROUP(GPIO2_A5, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), - PINCTRL_GROUP(GPIO2_A6, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), - PINCTRL_GROUP(GPIO2_A7, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), - PINCTRL_GROUP(GPIO2_B0, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), - PINCTRL_GROUP(GPIO2_B1, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), - PINCTRL_GROUP(GPIO2_B2, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), - PINCTRL_GROUP(GPIO2_B3, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), - PINCTRL_GROUP(GPIO2_B4, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), - PINCTRL_GROUP(GPIO2_B5, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), - PINCTRL_GROUP(GPIO2_B6, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), - PINCTRL_GROUP(GPIO2_B7, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), - PINCTRL_GROUP(GPIO2_C0, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), - PINCTRL_GROUP(GPIO2_C1, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), - PINCTRL_GROUP(GPIO2_C2, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), - PINCTRL_GROUP(GPIO2_C3, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), - PINCTRL_GROUP(GPIO2_C4, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), - PINCTRL_GROUP(GPIO2_C5, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), - PINCTRL_GROUP(GPIO2_C6, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), - PINCTRL_GROUP(GPIO2_C7, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, - RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), - - PINCTRL_GROUP(GPIO3_A0, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, GRF_GPIO3A_P_CON), - PINCTRL_GROUP(GPIO3_A1, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, GRF_GPIO3A_P_CON), - PINCTRL_GROUP(GPIO3_A2, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, GRF_GPIO3A_P_CON), - PINCTRL_GROUP(GPIO3_A3, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, GRF_GPIO3A_P_CON), - PINCTRL_GROUP(GPIO3_A4, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, 0), - PINCTRL_GROUP(GPIO3_A5, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, 0), - PINCTRL_GROUP(GPIO3_A6, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, 0), - PINCTRL_GROUP(GPIO3_A7, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, 0), - PINCTRL_GROUP(GPIO3_B0, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, GRF_GPIO3B_P_CON), - PINCTRL_GROUP(GPIO3_B1, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, GRF_GPIO3B_P_CON), - PINCTRL_GROUP(GPIO3_B2, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, GRF_GPIO3B_P_CON), - PINCTRL_GROUP(GPIO3_B3, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, GRF_GPIO3B_P_CON), - PINCTRL_GROUP(GPIO3_B4, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, - RK628_GPIO3_BASE, GRF_GPIO3B_P_CON), - - PINCTRL_GROUP(PIN_I2SM_SCK, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), - PINCTRL_GROUP(PIN_I2SM_D, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), - PINCTRL_GROUP(PIN_I2SM_LR, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), - PINCTRL_GROUP(PIN_RXDDC_SCL, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), - PINCTRL_GROUP(PIN_RXDDC_SDA, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), - PINCTRL_GROUP(PIN_HDMIRX_CE, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), - PINCTRL_GROUP(PIN_JTAG_EN, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), - PINCTRL_GROUP(PIN_UART_SEL, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), - PINCTRL_GROUP(PIN_UART_RTS_EN, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), - PINCTRL_GROUP(PIN_UART_CTS_EN, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), - -}; - #endif // RK628_GPIO_H - - diff --git a/drivers/misc/rk628/rk628_hdmitx.c b/drivers/misc/rk628/rk628_hdmitx.c index 8a9a6cf1c139..abd86c8d936e 100644 --- a/drivers/misc/rk628/rk628_hdmitx.c +++ b/drivers/misc/rk628/rk628_hdmitx.c @@ -840,7 +840,8 @@ static int rk628_hdmi_audio_hw_params(struct device *dev, void *d, struct hdmi_codec_daifmt *daifmt, struct hdmi_codec_params *params) { - struct rk628_hdmi *hdmi = dev_get_drvdata(dev); + struct rk628 *rk628 = dev_get_drvdata(dev); + struct rk628_hdmi *hdmi = rk628->hdmitx; struct audio_info audio = { .sample_width = params->sample_width, .sample_rate = params->sample_rate, @@ -874,7 +875,8 @@ static void rk628_hdmi_audio_shutdown(struct device *dev, void *d) static int rk628_hdmi_audio_mute(struct device *dev, void *d, bool mute, int direction) { - struct rk628_hdmi *hdmi = dev_get_drvdata(dev); + struct rk628 *rk628 = dev_get_drvdata(dev); + struct rk628_hdmi *hdmi = rk628->hdmitx; if (!hdmi->hdmi_data.sink_has_audio) { dev_err(hdmi->dev, "Sink do not support audio!\n"); @@ -896,7 +898,8 @@ static int rk628_hdmi_audio_mute(struct device *dev, void *d, bool mute, static int rk628_hdmi_audio_get_eld(struct device *dev, void *d, u8 *buf, size_t len) { - struct rk628_hdmi *hdmi = dev_get_drvdata(dev); + struct rk628 *rk628 = dev_get_drvdata(dev); + struct rk628_hdmi *hdmi = rk628->hdmitx; struct drm_mode_config *config = &hdmi->bridge.dev->mode_config; struct drm_connector *connector; int ret = -ENODEV; @@ -1231,7 +1234,6 @@ int rk628_hdmitx_enable(struct rk628 *rk628) irq = rk628->client->irq; if (irq < 0) return irq; - dev_set_drvdata(dev, hdmi); rk628_hdmi_reset(hdmi); diff --git a/drivers/misc/rk628/rk628_pinctrl.c b/drivers/misc/rk628/rk628_pinctrl.c index 19e5316cfb4f..e8661a3bbf81 100644 --- a/drivers/misc/rk628/rk628_pinctrl.c +++ b/drivers/misc/rk628/rk628_pinctrl.c @@ -8,6 +8,151 @@ #include "rk628.h" #include "rk628_gpio.h" +struct rk628_pin_iomux_group { + unsigned int pins; + int bank; + int mux; + int iomux_base; + int gpio_base; + int pull_reg; +}; + +#define PINCTRL_GROUP(a, b, c, d, e, f) \ + {.pins = a, .bank = b, .mux = c, .iomux_base = d, .gpio_base = e, .pull_reg = f} + +static const struct rk628_pin_iomux_group rk628_pin_iomux_groups[] = { + PINCTRL_GROUP(GPIO0_A0, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, + RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), + PINCTRL_GROUP(GPIO0_A1, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, + RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), + PINCTRL_GROUP(GPIO0_A2, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, RK628_GPIO0_BASE, 0), + PINCTRL_GROUP(GPIO0_A3, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, + RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), + PINCTRL_GROUP(GPIO0_A4, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, + RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), + PINCTRL_GROUP(GPIO0_A5, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, + RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), + PINCTRL_GROUP(GPIO0_A6, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, + RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), + PINCTRL_GROUP(GPIO0_A7, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, + RK628_GPIO0_BASE, GRF_GPIO0A_P_CON), + PINCTRL_GROUP(GPIO0_B0, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, RK628_GPIO0_BASE, 0), + PINCTRL_GROUP(GPIO0_B1, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, RK628_GPIO0_BASE, 0), + PINCTRL_GROUP(GPIO0_B2, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, RK628_GPIO0_BASE, 0), + PINCTRL_GROUP(GPIO0_B3, GPIO_BANK0, 1, GRF_GPIO0AB_SEL_CON, RK628_GPIO0_BASE, 0), + + PINCTRL_GROUP(GPIO1_A0, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, + RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), + PINCTRL_GROUP(GPIO1_A1, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, + RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), + PINCTRL_GROUP(GPIO1_A2, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, + RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), + PINCTRL_GROUP(GPIO1_A3, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, + RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), + PINCTRL_GROUP(GPIO1_A4, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, + RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), + PINCTRL_GROUP(GPIO1_A5, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, + RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), + PINCTRL_GROUP(GPIO1_A6, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, + RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), + PINCTRL_GROUP(GPIO1_A7, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, + RK628_GPIO1_BASE, GRF_GPIO1A_P_CON), + PINCTRL_GROUP(GPIO1_B0, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, RK628_GPIO1_BASE, 0), + PINCTRL_GROUP(GPIO1_B1, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, RK628_GPIO1_BASE, 0), + PINCTRL_GROUP(GPIO1_B2, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, RK628_GPIO1_BASE, 0), + PINCTRL_GROUP(GPIO1_B3, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, RK628_GPIO1_BASE, 0), + PINCTRL_GROUP(GPIO1_B4, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, RK628_GPIO1_BASE, 0), + PINCTRL_GROUP(GPIO1_B5, GPIO_BANK1, 1, GRF_GPIO1AB_SEL_CON, RK628_GPIO1_BASE, 0), + + PINCTRL_GROUP(GPIO2_A0, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), + PINCTRL_GROUP(GPIO2_A1, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), + PINCTRL_GROUP(GPIO2_A2, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), + PINCTRL_GROUP(GPIO2_A3, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), + PINCTRL_GROUP(GPIO2_A4, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), + PINCTRL_GROUP(GPIO2_A5, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), + PINCTRL_GROUP(GPIO2_A6, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), + PINCTRL_GROUP(GPIO2_A7, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2A_P_CON), + PINCTRL_GROUP(GPIO2_B0, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), + PINCTRL_GROUP(GPIO2_B1, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), + PINCTRL_GROUP(GPIO2_B2, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), + PINCTRL_GROUP(GPIO2_B3, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), + PINCTRL_GROUP(GPIO2_B4, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), + PINCTRL_GROUP(GPIO2_B5, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), + PINCTRL_GROUP(GPIO2_B6, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), + PINCTRL_GROUP(GPIO2_B7, GPIO_BANK2, 1, GRF_GPIO2AB_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2B_P_CON), + PINCTRL_GROUP(GPIO2_C0, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), + PINCTRL_GROUP(GPIO2_C1, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), + PINCTRL_GROUP(GPIO2_C2, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), + PINCTRL_GROUP(GPIO2_C3, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), + PINCTRL_GROUP(GPIO2_C4, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), + PINCTRL_GROUP(GPIO2_C5, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), + PINCTRL_GROUP(GPIO2_C6, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), + PINCTRL_GROUP(GPIO2_C7, GPIO_BANK2, 1, GRF_GPIO2C_SEL_CON, + RK628_GPIO2_BASE, GRF_GPIO2C_P_CON), + + PINCTRL_GROUP(GPIO3_A0, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, GRF_GPIO3A_P_CON), + PINCTRL_GROUP(GPIO3_A1, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, GRF_GPIO3A_P_CON), + PINCTRL_GROUP(GPIO3_A2, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, GRF_GPIO3A_P_CON), + PINCTRL_GROUP(GPIO3_A3, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, GRF_GPIO3A_P_CON), + PINCTRL_GROUP(GPIO3_A4, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, 0), + PINCTRL_GROUP(GPIO3_A5, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, 0), + PINCTRL_GROUP(GPIO3_A6, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, 0), + PINCTRL_GROUP(GPIO3_A7, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, 0), + PINCTRL_GROUP(GPIO3_B0, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, GRF_GPIO3B_P_CON), + PINCTRL_GROUP(GPIO3_B1, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, GRF_GPIO3B_P_CON), + PINCTRL_GROUP(GPIO3_B2, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, GRF_GPIO3B_P_CON), + PINCTRL_GROUP(GPIO3_B3, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, GRF_GPIO3B_P_CON), + PINCTRL_GROUP(GPIO3_B4, GPIO_BANK3, 1, GRF_GPIO3AB_SEL_CON, + RK628_GPIO3_BASE, GRF_GPIO3B_P_CON), + + PINCTRL_GROUP(PIN_I2SM_SCK, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), + PINCTRL_GROUP(PIN_I2SM_D, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), + PINCTRL_GROUP(PIN_I2SM_LR, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), + PINCTRL_GROUP(PIN_RXDDC_SCL, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), + PINCTRL_GROUP(PIN_RXDDC_SDA, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), + PINCTRL_GROUP(PIN_HDMIRX_CE, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), + PINCTRL_GROUP(PIN_JTAG_EN, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), + PINCTRL_GROUP(PIN_UART_SEL, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), + PINCTRL_GROUP(PIN_UART_RTS_EN, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), + PINCTRL_GROUP(PIN_UART_CTS_EN, GPIO_BANKX, 1, GRF_SYSTEM_CON3, 0, 0), + +}; + static int rk628_calc_mux_offset(struct rk628 *rk628, int mux, int reg, int offset) { int val = 0, orig; diff --git a/include/uapi/linux/rk-camera-module.h b/include/uapi/linux/rk-camera-module.h index d25977d3b878..334b6915a733 100644 --- a/include/uapi/linux/rk-camera-module.h +++ b/include/uapi/linux/rk-camera-module.h @@ -669,6 +669,7 @@ struct rkmodule_channel_info { __u32 bus_fmt; __u32 data_type; __u32 data_bit; + __u32 field; } __attribute__ ((packed)); /* diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 612873ec2197..a0822b91ded0 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -8520,7 +8520,7 @@ static int detach_tasks(struct lb_env *env) case migrate_util: util = task_util_est(p); - if (util > env->imbalance) + if (shr_bound(util, env->sd->nr_balance_failed) > env->imbalance) goto next; env->imbalance -= util;