static int ht16k33_seg_probe()

in ht16k33.c [667:711]


static int ht16k33_seg_probe(struct device *dev, struct ht16k33_priv *priv,
			     uint32_t brightness)
{
	struct ht16k33_seg *seg = &priv->seg;
	int err;

	err = ht16k33_brightness_set(priv, brightness);
	if (err)
		return err;

	switch (priv->type) {
	case DISP_MATRIX:
		/* not handled here */
		err = -EINVAL;
		break;

	case DISP_QUAD_7SEG:
		INIT_DELAYED_WORK(&priv->work, ht16k33_seg7_update);
		seg->map.seg7 = initial_map_seg7;
		seg->map_size = sizeof(seg->map.seg7);
		err = device_create_file(dev, &dev_attr_map_seg7);
		break;

	case DISP_QUAD_14SEG:
		INIT_DELAYED_WORK(&priv->work, ht16k33_seg14_update);
		seg->map.seg14 = initial_map_seg14;
		seg->map_size = sizeof(seg->map.seg14);
		err = device_create_file(dev, &dev_attr_map_seg14);
		break;
	}
	if (err)
		return err;

	err = linedisp_register(&seg->linedisp, dev, 4, seg->curr,
				ht16k33_linedisp_update);
	if (err)
		goto err_remove_map_file;

	return 0;

err_remove_map_file:
	device_remove_file(dev, &dev_attr_map_seg7);
	device_remove_file(dev, &dev_attr_map_seg14);
	return err;
}