Lines Matching full:gsc

26 #include "gsc-core.h"
340 void gsc_set_prefbuf(struct gsc_dev *gsc, struct gsc_frame *frm) in gsc_set_prefbuf() argument
392 struct gsc_dev *gsc = ctx->gsc_dev; in gsc_try_fmt_mplane() local
393 struct gsc_variant *variant = gsc->variant; in gsc_try_fmt_mplane()
521 struct gsc_dev *gsc = ctx->gsc_dev; in gsc_try_selection() local
522 struct gsc_variant *variant = gsc->variant; in gsc_try_selection()
701 struct gsc_dev *gsc = ctx->gsc_dev; in __gsc_s_ctrl() local
702 struct gsc_variant *variant = gsc->variant; in __gsc_s_ctrl()
863 struct gsc_dev *gsc = priv; in gsc_irq_handler() local
867 gsc_irq = gsc_hw_get_irq_status(gsc); in gsc_irq_handler()
868 gsc_hw_clear_irq(gsc, gsc_irq); in gsc_irq_handler()
875 spin_lock(&gsc->slock); in gsc_irq_handler()
877 if (test_and_clear_bit(ST_M2M_PEND, &gsc->state)) { in gsc_irq_handler()
879 gsc_hw_enable_control(gsc, false); in gsc_irq_handler()
881 if (test_and_clear_bit(ST_M2M_SUSPENDING, &gsc->state)) { in gsc_irq_handler()
882 set_bit(ST_M2M_SUSPENDED, &gsc->state); in gsc_irq_handler()
883 wake_up(&gsc->irq_queue); in gsc_irq_handler()
886 ctx = v4l2_m2m_get_curr_priv(gsc->m2m.m2m_dev); in gsc_irq_handler()
891 spin_unlock(&gsc->slock); in gsc_irq_handler()
897 wake_up(&gsc->irq_queue); in gsc_irq_handler()
903 spin_unlock(&gsc->slock); in gsc_irq_handler()
1087 .compatible = "samsung,exynos5250-gsc",
1091 .compatible = "samsung,exynos5420-gsc",
1095 .compatible = "samsung,exynos5433-gsc",
1099 .compatible = "samsung,exynos5-gsc",
1108 struct gsc_dev *gsc; in gsc_probe() local
1115 gsc = devm_kzalloc(dev, sizeof(struct gsc_dev), GFP_KERNEL); in gsc_probe()
1116 if (!gsc) in gsc_probe()
1119 ret = of_alias_get_id(pdev->dev.of_node, "gsc"); in gsc_probe()
1124 dev_info(dev, "compatible 'exynos5-gsc' is deprecated\n"); in gsc_probe()
1126 gsc->id = ret; in gsc_probe()
1127 if (gsc->id >= drv_data->num_entities) { in gsc_probe()
1128 dev_err(dev, "Invalid platform device id: %d\n", gsc->id); in gsc_probe()
1132 gsc->num_clocks = drv_data->num_clocks; in gsc_probe()
1133 gsc->variant = drv_data->variant[gsc->id]; in gsc_probe()
1134 gsc->pdev = pdev; in gsc_probe()
1136 init_waitqueue_head(&gsc->irq_queue); in gsc_probe()
1137 spin_lock_init(&gsc->slock); in gsc_probe()
1138 mutex_init(&gsc->lock); in gsc_probe()
1141 gsc->regs = devm_ioremap_resource(dev, res); in gsc_probe()
1142 if (IS_ERR(gsc->regs)) in gsc_probe()
1143 return PTR_ERR(gsc->regs); in gsc_probe()
1151 for (i = 0; i < gsc->num_clocks; i++) { in gsc_probe()
1152 gsc->clock[i] = devm_clk_get(dev, drv_data->clk_names[i]); in gsc_probe()
1153 if (IS_ERR(gsc->clock[i])) { in gsc_probe()
1156 return PTR_ERR(gsc->clock[i]); in gsc_probe()
1160 for (i = 0; i < gsc->num_clocks; i++) { in gsc_probe()
1161 ret = clk_prepare_enable(gsc->clock[i]); in gsc_probe()
1166 clk_disable_unprepare(gsc->clock[i]); in gsc_probe()
1172 0, pdev->name, gsc); in gsc_probe()
1178 ret = v4l2_device_register(dev, &gsc->v4l2_dev); in gsc_probe()
1182 ret = gsc_register_m2m_device(gsc); in gsc_probe()
1186 platform_set_drvdata(pdev, gsc); in gsc_probe()
1188 gsc_hw_set_sw_reset(gsc); in gsc_probe()
1189 gsc_wait_reset(gsc); in gsc_probe()
1193 dev_dbg(dev, "gsc-%d registered successfully\n", gsc->id); in gsc_probe()
1201 v4l2_device_unregister(&gsc->v4l2_dev); in gsc_probe()
1203 for (i = gsc->num_clocks - 1; i >= 0; i--) in gsc_probe()
1204 clk_disable_unprepare(gsc->clock[i]); in gsc_probe()
1210 struct gsc_dev *gsc = platform_get_drvdata(pdev); in gsc_remove() local
1215 gsc_unregister_m2m_device(gsc); in gsc_remove()
1216 v4l2_device_unregister(&gsc->v4l2_dev); in gsc_remove()
1219 for (i = 0; i < gsc->num_clocks; i++) in gsc_remove()
1220 clk_disable_unprepare(gsc->clock[i]); in gsc_remove()
1230 static int gsc_m2m_suspend(struct gsc_dev *gsc) in gsc_m2m_suspend() argument
1235 spin_lock_irqsave(&gsc->slock, flags); in gsc_m2m_suspend()
1236 if (!gsc_m2m_pending(gsc)) { in gsc_m2m_suspend()
1237 spin_unlock_irqrestore(&gsc->slock, flags); in gsc_m2m_suspend()
1240 clear_bit(ST_M2M_SUSPENDED, &gsc->state); in gsc_m2m_suspend()
1241 set_bit(ST_M2M_SUSPENDING, &gsc->state); in gsc_m2m_suspend()
1242 spin_unlock_irqrestore(&gsc->slock, flags); in gsc_m2m_suspend()
1244 timeout = wait_event_timeout(gsc->irq_queue, in gsc_m2m_suspend()
1245 test_bit(ST_M2M_SUSPENDED, &gsc->state), in gsc_m2m_suspend()
1248 clear_bit(ST_M2M_SUSPENDING, &gsc->state); in gsc_m2m_suspend()
1252 static void gsc_m2m_resume(struct gsc_dev *gsc) in gsc_m2m_resume() argument
1257 spin_lock_irqsave(&gsc->slock, flags); in gsc_m2m_resume()
1259 ctx = gsc->m2m.ctx; in gsc_m2m_resume()
1260 gsc->m2m.ctx = NULL; in gsc_m2m_resume()
1261 spin_unlock_irqrestore(&gsc->slock, flags); in gsc_m2m_resume()
1263 if (test_and_clear_bit(ST_M2M_SUSPENDED, &gsc->state)) in gsc_m2m_resume()
1269 struct gsc_dev *gsc = dev_get_drvdata(dev); in gsc_runtime_resume() local
1273 pr_debug("gsc%d: state: 0x%lx\n", gsc->id, gsc->state); in gsc_runtime_resume()
1275 for (i = 0; i < gsc->num_clocks; i++) { in gsc_runtime_resume()
1276 ret = clk_prepare_enable(gsc->clock[i]); in gsc_runtime_resume()
1279 clk_disable_unprepare(gsc->clock[i]); in gsc_runtime_resume()
1284 gsc_hw_set_sw_reset(gsc); in gsc_runtime_resume()
1285 gsc_wait_reset(gsc); in gsc_runtime_resume()
1286 gsc_m2m_resume(gsc); in gsc_runtime_resume()
1293 struct gsc_dev *gsc = dev_get_drvdata(dev); in gsc_runtime_suspend() local
1297 ret = gsc_m2m_suspend(gsc); in gsc_runtime_suspend()
1301 for (i = gsc->num_clocks - 1; i >= 0; i--) in gsc_runtime_suspend()
1302 clk_disable_unprepare(gsc->clock[i]); in gsc_runtime_suspend()
1304 pr_debug("gsc%d: state: 0x%lx\n", gsc->id, gsc->state); in gsc_runtime_suspend()