| /linux/Documentation/devicetree/bindings/display/msm/ |
| H A D | dsi-controller-main.yaml | 4 $id: http://devicetree.org/schemas/display/msm/dsi-controller-main.yaml# 7 title: Qualcomm Display DSI controller 17 - qcom,apq8064-dsi-ctrl 18 - qcom,kaanapali-dsi-ctrl 19 - qcom,milos-dsi-ctrl 20 - qcom,msm8226-dsi-ctrl 21 - qcom,msm8916-dsi-ctrl 22 - qcom,msm8953-dsi-ctrl 23 - qcom,msm8974-dsi-ctrl 24 - qcom,msm8976-dsi-ctrl [all …]
|
| /linux/drivers/gpu/drm/stm/ |
| H A D | dw_mipi_dsi-stm.c | 27 /* DSI digital registers & bit definitions */ 31 /* DSI wrapper registers & bit definitions */ 34 #define WCFGR_DSIM BIT(0) /* DSI Mode */ 38 #define WCR_DSIEN BIT(3) /* DSI ENable */ 62 /* dsi color format coding according to the datasheet */ 85 struct dw_mipi_dsi *dsi; member 93 static inline void dsi_write(struct dw_mipi_dsi_stm *dsi, u32 reg, u32 val) in dsi_write() argument 95 writel(val, dsi->base + reg); in dsi_write() 98 static inline u32 dsi_read(struct dw_mipi_dsi_stm *dsi, u32 reg) in dsi_read() argument 100 return readl(dsi->base + reg); in dsi_read() [all …]
|
| /linux/drivers/gpu/drm/bridge/ |
| H A D | samsung-dsim.c | 703 static inline void samsung_dsim_write(struct samsung_dsim *dsi, in samsung_dsim_write() argument 706 writel(val, dsi->reg_base + dsi->driver_data->reg_ofs[idx]); in samsung_dsim_write() 709 static inline u32 samsung_dsim_read(struct samsung_dsim *dsi, enum reg_idx idx) in samsung_dsim_read() argument 711 return readl(dsi->reg_base + dsi->driver_data->reg_ofs[idx]); in samsung_dsim_read() 714 static void samsung_dsim_wait_for_reset(struct samsung_dsim *dsi) in samsung_dsim_wait_for_reset() argument 716 if (wait_for_completion_timeout(&dsi->completed, msecs_to_jiffies(300))) in samsung_dsim_wait_for_reset() 719 dev_err(dsi->dev, "timeout waiting for reset\n"); in samsung_dsim_wait_for_reset() 722 static void samsung_dsim_reset(struct samsung_dsim *dsi) in samsung_dsim_reset() argument 724 u32 reset_val = dsi->driver_data->reg_values[RESET_TYPE]; in samsung_dsim_reset() 726 reinit_completion(&dsi->completed); in samsung_dsim_reset() [all …]
|
| /linux/drivers/gpu/drm/bridge/imx/ |
| H A D | imx93-mipi-dsi.c | 203 static void dphy_pll_write(struct imx93_dsi *dsi, unsigned int reg, u32 value) in dphy_pll_write() argument 207 ret = regmap_write(dsi->regmap, reg, value); in dphy_pll_write() 209 dev_err(dsi->dev, "failed to write 0x%08x to pll reg 0x%x: %d\n", in dphy_pll_write() 220 dphy_pll_get_configure_from_opts(struct imx93_dsi *dsi, in dphy_pll_get_configure_from_opts() argument 224 struct device *dev = dsi->dev; in dphy_pll_get_configure_from_opts() 225 unsigned long fin = dsi->ref_clk_rate; in dphy_pll_get_configure_from_opts() 296 static void dphy_pll_clear_shadow(struct imx93_dsi *dsi) in dphy_pll_clear_shadow() argument 300 dphy_pll_write(dsi, DSI_REG, CLKSEL_GEN); in dphy_pll_clear_shadow() 304 dphy_pll_write(dsi, DSI_REG, CLKSEL_GEN | SHADOW_CLR); in dphy_pll_clear_shadow() 308 dphy_pll_write(dsi, DSI_REG, CLKSEL_GEN); in dphy_pll_clear_shadow() [all …]
|
| /linux/Documentation/devicetree/bindings/display/ |
| H A D | mipi-dsi-bus.txt | 1 MIPI DSI (Display Serial Interface) busses 6 define the syntax used to represent a DSI bus in a device tree. 8 This document describes DSI bus-specific properties only or defines existing 9 standard properties in the context of the DSI bus. 11 Each DSI host provides a DSI bus. The DSI host controller's node contains a 15 The following assumes that only a single peripheral is connected to a DSI 18 DSI host 22 a DSI host, the following properties apply to a node representing a DSI host. 26 bus. DSI peripherals are addressed using a 2-bit virtual channel number, so 34 conjunction with another DSI host to drive the same peripheral. Hardware [all …]
|
| H A D | allwinner,sun6i-a31-mipi-dsi.yaml | 4 $id: http://devicetree.org/schemas/display/allwinner,sun6i-a31-mipi-dsi.yaml# 7 title: Allwinner A31 MIPI-DSI Controller 17 - allwinner,sun6i-a31-mipi-dsi 18 - allwinner,sun50i-a64-mipi-dsi 19 - allwinner,sun50i-a100-mipi-dsi 21 - const: allwinner,sun20i-d1-mipi-dsi 22 - const: allwinner,sun50i-a100-mipi-dsi 44 vcc-dsi-supply: 45 description: VCC-DSI power supply of the DSI encoder 70 - $ref: dsi-controller.yaml# [all …]
|
| H A D | dsi-controller.yaml | 4 $id: http://devicetree.org/schemas/display/dsi-controller.yaml# 7 title: Common Properties for DSI Display Panels 13 This document defines device tree properties common to DSI, Display 22 Notice: this binding concerns DSI panels connected directly to a master 23 without any intermediate port graph to the panel. Each DSI master 31 pattern: "^dsi(@.*)?$" 37 another DSI host to drive the same peripheral. Hardware supporting 39 to be driven by the same clock. Only the DSI host instance 50 description: Panels connected to the DSI link 58 The virtual channel number of a DSI peripheral. Must be in the range [all …]
|
| H A D | st,stm32-dsi.yaml | 4 $id: http://devicetree.org/schemas/display/st,stm32-dsi.yaml# 7 title: STMicroelectronics STM32 DSI host controller 14 The STMicroelectronics STM32 DSI controller uses the Synopsys DesignWare MIPI-DSI host controller. 17 - $ref: dsi-controller.yaml# 21 const: st,stm32-dsi 29 - description: DSI bus clock 47 phy-dsi-supply: 58 DSI input port node, connected to the ltdc rgb output port. 64 DSI output port node, connected to a panel or a bridge input port. 91 dsi: dsi@5a000000 { [all …]
|
| /linux/Documentation/devicetree/bindings/display/tegra/ |
| H A D | nvidia,tegra20-dsi.yaml | 4 $id: http://devicetree.org/schemas/display/tegra/nvidia,tegra20-dsi.yaml# 17 - nvidia,tegra20-dsi 18 - nvidia,tegra30-dsi 19 - nvidia,tegra114-dsi 20 - nvidia,tegra124-dsi 21 - nvidia,tegra210-dsi 22 - nvidia,tegra186-dsi 25 - const: nvidia,tegra132-dsi 26 - const: nvidia,tegra124-dsi 48 - const: dsi [all …]
|
| /linux/drivers/gpu/drm/panel/ |
| H A D | panel-samsung-s6e8fc0-m1906f9.c | 4 // Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree: 22 struct mipi_dsi_device *dsi; member 59 struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi }; in s6e8fc0_m1906f9_on() 89 struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi }; in s6e8fc0_m1906f9_off() 102 struct device *dev = &ctx->dsi->dev; in s6e8fc0_m1906f9_prepare() 127 struct device *dev = &ctx->dsi->dev; in s6e8fc0_m1906f9_unprepare() 169 struct mipi_dsi_device *dsi = bl_get_data(bl); in s6e8fc0_bl_update_status() local 173 dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in s6e8fc0_bl_update_status() 175 ret = mipi_dsi_dcs_set_display_brightness_large(dsi, brightness); in s6e8fc0_bl_update_status() 179 dsi->mode_flags |= MIPI_DSI_MODE_LPM; in s6e8fc0_bl_update_status() [all …]
|
| H A D | panel-samsung-s6e63m0-dsi.c | 3 * DSI interface to the Samsung S6E63M0 panel. 21 struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev); in s6e63m0_dsi_dcs_read() local 24 ret = mipi_dsi_dcs_read(dsi, cmd, data, 1); in s6e63m0_dsi_dcs_read() 30 dev_dbg(dev, "DSI read CMD %02x = %02x\n", cmd, *data); in s6e63m0_dsi_dcs_read() 38 struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev); in s6e63m0_dsi_dcs_write() local 46 dev_dbg(dev, "DSI writing dcs seq: %*ph\n", (int)len, data); in s6e63m0_dsi_dcs_write() 58 ret = mipi_dsi_dcs_write(dsi, cmd, seqp, chunk); in s6e63m0_dsi_dcs_write() 70 ret = mipi_dsi_dcs_write(dsi, MCS_GLOBAL_PARAM, &cmdwritten, 1); in s6e63m0_dsi_dcs_write() 76 ret = mipi_dsi_dcs_write(dsi, cmd, seqp, chunk); in s6e63m0_dsi_dcs_write() 91 static int s6e63m0_dsi_probe(struct mipi_dsi_device *dsi) in s6e63m0_dsi_probe() argument [all …]
|
| H A D | panel-novatek-nt37801.c | 21 struct mipi_dsi_device *dsi; member 56 dsi_ctx->dsi->mode_flags |= MIPI_DSI_MODE_LPM; in novatek_nt37801_on() 108 struct mipi_dsi_device *dsi = ctx->dsi; in novatek_nt37801_off() local 109 struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi }; in novatek_nt37801_off() 111 dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in novatek_nt37801_off() 125 struct mipi_dsi_device *dsi = ctx->dsi; in novatek_nt37801_prepare() local 126 struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi }; in novatek_nt37801_prepare() 160 struct device *dev = &ctx->dsi->dev; in novatek_nt37801_unprepare() 203 struct mipi_dsi_device *dsi = bl_get_data(bl); in novatek_nt37801_bl_update_status() local 207 dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in novatek_nt37801_bl_update_status() [all …]
|
| H A D | panel-feiyang-fy07024di26a30d.c | 20 struct mipi_dsi_device *dsi; member 49 struct mipi_dsi_device *dsi = ctx->dsi; in feiyang_prepare() local 84 ret = mipi_dsi_dcs_write_buffer(dsi, cmd->data, in feiyang_prepare() 100 return mipi_dsi_dcs_set_display_on(ctx->dsi); in feiyang_enable() 107 return mipi_dsi_dcs_set_display_off(ctx->dsi); in feiyang_disable() 115 ret = mipi_dsi_dcs_set_display_off(ctx->dsi); in feiyang_unprepare() 119 ret = mipi_dsi_dcs_enter_sleep_mode(ctx->dsi); in feiyang_unprepare() 162 dev_err(&ctx->dsi->dev, "failed to add mode %ux%u@%u\n", in feiyang_get_modes() 184 static int feiyang_dsi_probe(struct mipi_dsi_device *dsi) in feiyang_dsi_probe() argument 189 ctx = devm_drm_panel_alloc(&dsi->dev, struct feiyang, panel, in feiyang_dsi_probe() [all …]
|
| H A D | panel-ronbo-rb070d30.c | 29 struct mipi_dsi_device *dsi; member 52 dev_err(&ctx->dsi->dev, "Failed to enable supply: %d\n", ret); in rb070d30_panel_prepare() 79 return mipi_dsi_dcs_exit_sleep_mode(ctx->dsi); in rb070d30_panel_enable() 86 return mipi_dsi_dcs_enter_sleep_mode(ctx->dsi); in rb070d30_panel_disable() 114 dev_err(&ctx->dsi->dev, "Failed to add mode " DRM_MODE_FMT "\n", in rb070d30_panel_get_modes() 141 static int rb070d30_panel_dsi_probe(struct mipi_dsi_device *dsi) in rb070d30_panel_dsi_probe() argument 146 ctx = devm_drm_panel_alloc(&dsi->dev, struct rb070d30_panel, panel, in rb070d30_panel_dsi_probe() 152 ctx->supply = devm_regulator_get(&dsi->dev, "vcc-lcd"); in rb070d30_panel_dsi_probe() 156 mipi_dsi_set_drvdata(dsi, ctx); in rb070d30_panel_dsi_probe() 157 ctx->dsi = dsi; in rb070d30_panel_dsi_probe() [all …]
|
| H A D | panel-sony-td4353-jdi.c | 5 * Generated with linux-mdss-dsi-panel-driver-generator with a 35 struct mipi_dsi_device *dsi; member 49 struct mipi_dsi_device *dsi = ctx->dsi; in sony_td4353_jdi_on() local 50 struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi }; in sony_td4353_jdi_on() 52 dsi->mode_flags |= MIPI_DSI_MODE_LPM; in sony_td4353_jdi_on() 74 struct mipi_dsi_device *dsi = ctx->dsi; in sony_td4353_jdi_off() local 75 struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi }; in sony_td4353_jdi_off() 77 dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in sony_td4353_jdi_off() 172 static int sony_td4353_jdi_probe(struct mipi_dsi_device *dsi) in sony_td4353_jdi_probe() argument 174 struct device *dev = &dsi->dev; in sony_td4353_jdi_probe() [all …]
|
| H A D | panel-hydis-hv101hd1.c | 19 struct mipi_dsi_device *dsi; member 36 struct mipi_dsi_multi_context ctx = { .dsi = hv->dsi }; in hv101hd1_prepare() 37 struct device *dev = &hv->dsi->dev; in hv101hd1_prepare() 58 struct mipi_dsi_multi_context ctx = { .dsi = hv->dsi }; in hv101hd1_disable() 117 static int hv101hd1_probe(struct mipi_dsi_device *dsi) in hv101hd1_probe() argument 119 struct device *dev = &dsi->dev; in hv101hd1_probe() 134 hv->dsi = dsi; in hv101hd1_probe() 135 mipi_dsi_set_drvdata(dsi, hv); in hv101hd1_probe() 137 dsi->lanes = 2; in hv101hd1_probe() 138 dsi->format = MIPI_DSI_FMT_RGB888; in hv101hd1_probe() [all …]
|
| H A D | panel-samsung-s6d16d0.c | 3 * MIPI-DSI Samsung s6d16d0 panel driver. This is a 864x480 4 * AMOLED panel with a command-only DSI interface. 50 struct mipi_dsi_device *dsi = to_mipi_dsi_device(s6->dev); in s6d16d0_unprepare() local 54 ret = mipi_dsi_dcs_enter_sleep_mode(dsi); in s6d16d0_unprepare() 70 struct mipi_dsi_device *dsi = to_mipi_dsi_device(s6->dev); in s6d16d0_prepare() local 87 ret = mipi_dsi_dcs_set_tear_on(dsi, in s6d16d0_prepare() 94 ret = mipi_dsi_dcs_exit_sleep_mode(dsi); in s6d16d0_prepare() 112 struct mipi_dsi_device *dsi = to_mipi_dsi_device(s6->dev); in s6d16d0_enable() local 115 ret = mipi_dsi_dcs_set_display_on(dsi); in s6d16d0_enable() 127 struct mipi_dsi_device *dsi = to_mipi_dsi_device(s6->dev); in s6d16d0_disable() local [all …]
|
| H A D | panel-boe-td4320.c | 3 // Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree: 20 struct mipi_dsi_device *dsi; member 48 struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi }; in boe_td4320_on() 50 ctx->dsi->mode_flags |= MIPI_DSI_MODE_LPM; in boe_td4320_on() 87 struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi }; in boe_td4320_off() 89 ctx->dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in boe_td4320_off() 102 struct device *dev = &ctx->dsi->dev; in boe_td4320_prepare() 127 struct device *dev = &ctx->dsi->dev; in boe_td4320_unprepare() 167 static int boe_td4320_probe(struct mipi_dsi_device *dsi) in boe_td4320_probe() argument 169 struct device *dev = &dsi->dev; in boe_td4320_probe() [all …]
|
| H A D | panel-visionox-rm692e5.c | 3 * Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree: 26 struct mipi_dsi_device *dsi; member 55 struct mipi_dsi_device *dsi = ctx->dsi; in visionox_rm692e5_on() local 56 struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi }; in visionox_rm692e5_on() 58 dsi->mode_flags |= MIPI_DSI_MODE_LPM; in visionox_rm692e5_on() 176 struct mipi_dsi_device *dsi = ctx->dsi; in visionox_rm692e5_disable() local 177 struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi }; in visionox_rm692e5_disable() 179 dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in visionox_rm692e5_disable() 193 struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi }; in visionox_rm692e5_prepare() 305 struct mipi_dsi_device *dsi = bl_get_data(bl); in visionox_rm692e5_bl_update_status() local [all …]
|
| H A D | panel-samsung-ltl106hl02.c | 20 struct mipi_dsi_device *dsi; member 42 struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi }; in samsung_ltl106hl02_prepare() 43 struct device *dev = &ctx->dsi->dev; in samsung_ltl106hl02_prepare() 67 struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi }; in samsung_ltl106hl02_unprepare() 109 static int samsung_ltl106hl02_probe(struct mipi_dsi_device *dsi) in samsung_ltl106hl02_probe() argument 111 struct device *dev = &dsi->dev; in samsung_ltl106hl02_probe() 131 ctx->dsi = dsi; in samsung_ltl106hl02_probe() 132 mipi_dsi_set_drvdata(dsi, ctx); in samsung_ltl106hl02_probe() 134 dsi->lanes = 4; in samsung_ltl106hl02_probe() 135 dsi->format = MIPI_DSI_FMT_RGB888; in samsung_ltl106hl02_probe() [all …]
|
| H A D | panel-lg-ld070wx3.c | 24 struct mipi_dsi_device *dsi; member 37 struct mipi_dsi_multi_context ctx = { .dsi = priv->dsi }; in lg_ld070wx3_prepare() 78 struct mipi_dsi_multi_context ctx = { .dsi = priv->dsi }; in lg_ld070wx3_unprepare() 119 static int lg_ld070wx3_probe(struct mipi_dsi_device *dsi) in lg_ld070wx3_probe() argument 121 struct device *dev = &dsi->dev; in lg_ld070wx3_probe() 136 priv->dsi = dsi; in lg_ld070wx3_probe() 137 mipi_dsi_set_drvdata(dsi, priv); in lg_ld070wx3_probe() 139 dsi->lanes = 4; in lg_ld070wx3_probe() 140 dsi->format = MIPI_DSI_FMT_RGB888; in lg_ld070wx3_probe() 141 dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_LPM; in lg_ld070wx3_probe() [all …]
|
| H A D | panel-sharp-lq101r1sx01.c | 21 /* the datasheet refers to them as DSI-LINK1 and DSI-LINK2 */ 48 struct mipi_dsi_device *dsi = sharp->link1; in sharp_panel_write() local 51 err = mipi_dsi_generic_write(dsi, payload, sizeof(payload)); in sharp_panel_write() 53 dev_err(&dsi->dev, "failed to write %02x to %04x: %zd\n", in sharp_panel_write() 58 err = mipi_dsi_dcs_nop(dsi); in sharp_panel_write() 60 dev_err(&dsi->dev, "failed to send DCS nop: %zd\n", err); in sharp_panel_write() 198 * put in place to communicate the configuration back to the DSI host in sharp_panel_prepare() 300 static int sharp_panel_probe(struct mipi_dsi_device *dsi) in sharp_panel_probe() argument 307 dsi->lanes = 4; in sharp_panel_probe() 308 dsi->format = MIPI_DSI_FMT_RGB888; in sharp_panel_probe() [all …]
|
| /linux/drivers/gpu/drm/hisilicon/kirin/ |
| H A D | dw_drm_dsi.c | 3 * DesignWare MIPI DSI Host Controller v1.02 driver 97 struct dw_dsi dsi; member 308 * dsi phy reg write function 468 * The DSI IP accepts vertical timing using lines as normal, in dsi_set_mode_timing() 536 static void dsi_mipi_init(struct dw_dsi *dsi) in dsi_mipi_init() argument 538 struct dsi_hw_ctx *ctx = dsi->ctx; in dsi_mipi_init() 539 struct mipi_phy_params *phy = &dsi->phy; in dsi_mipi_init() 540 struct drm_display_mode *mode = &dsi->cur_mode; in dsi_mipi_init() 541 u32 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format); in dsi_mipi_init() 548 dphy_req_kHz = mode->clock * bpp / dsi->lanes; in dsi_mipi_init() [all …]
|
| /linux/drivers/video/fbdev/omap2/omapfb/displays/ |
| H A D | panel-dsi-cm.c | 3 * Generic DSI Command Mode panel driver 27 /* DSI Virtual channel. Hardcoded for now. */ 111 r = in->ops.dsi->dcs_read(in, ddata->channel, dcs_cmd, buf, 1); in dsicm_dcs_read_1() 124 return in->ops.dsi->dcs_write(in, ddata->channel, &dcs_cmd, 1); in dsicm_dcs_write_0() 132 return in->ops.dsi->dcs_write(in, ddata->channel, buf, 2); in dsicm_dcs_write_1() 145 r = in->ops.dsi->dcs_write_nosync(in, ddata->channel, &cmd, 1); in dsicm_sleep_in() 207 r = in->ops.dsi->dcs_write_nosync(in, ddata->channel, buf, sizeof(buf)); in dsicm_set_update_window() 217 r = in->ops.dsi->dcs_write_nosync(in, ddata->channel, buf, sizeof(buf)); in dsicm_set_update_window() 221 in->ops.dsi->bta_sync(in, ddata->channel); in dsicm_set_update_window() 255 in->ops.dsi->disable(in, false, true); in dsicm_enter_ulps() [all …]
|
| /linux/drivers/gpu/drm/bridge/cadence/ |
| H A D | cdns-dsi-j721e.c | 3 * TI j721e Cadence DSI wrapper 12 #include "cdns-dsi-j721e.h" 23 static int cdns_dsi_j721e_init(struct cdns_dsi *dsi) in cdns_dsi_j721e_init() argument 25 struct platform_device *pdev = to_platform_device(dsi->base.dev); in cdns_dsi_j721e_init() 27 dsi->j721e_regs = devm_platform_ioremap_resource(pdev, 1); in cdns_dsi_j721e_init() 28 return PTR_ERR_OR_ZERO(dsi->j721e_regs); in cdns_dsi_j721e_init() 31 static void cdns_dsi_j721e_enable(struct cdns_dsi *dsi) in cdns_dsi_j721e_enable() argument 35 * to DSI DPI0. This is the only supported configuration on in cdns_dsi_j721e_enable() 38 writel(DSI_WRAP_DPI_0_EN, dsi->j721e_regs + DSI_WRAP_DPI_CONTROL); in cdns_dsi_j721e_enable() 41 static void cdns_dsi_j721e_disable(struct cdns_dsi *dsi) in cdns_dsi_j721e_disable() argument [all …]
|