Lines Matching defs:sna_output

249 struct sna_output {
405 static inline struct sna_output *to_sna_output(xf86OutputPtr output)
779 struct sna_output *sna_output = to_sna_output(output);
782 if (sna_output->dpms_mode != DPMSModeOn)
785 val = backlight_get(&sna_output->backlight);
789 __FUNCTION__, output->name, sna_output->backlight.iface,
790 sna_output->backlight_active_level, val));
792 if (val == sna_output->backlight_active_level)
795 sna_output->backlight_active_level = val;
885 sna_output_backlight_disable(struct sna_output *sna_output)
887 xf86OutputPtr output = sna_output->base;
891 sna_output->backlight.iface, output->name);
892 backlight_disable(&sna_output->backlight);
900 sna_output_backlight_set(struct sna_output *sna_output, int level)
905 sna_output->base->name, level, sna_output->backlight.max));
907 if (backlight_set(&sna_output->backlight, level)) {
908 sna_output_backlight_disable(sna_output);
916 sna_backlight_drain_uevents(to_sna(sna_output->base->scrn));
921 has_native_backlight(struct sna_output *sna_output)
923 return sna_output->backlight.type == BL_RAW;
927 sna_output_backlight_off(struct sna_output *sna_output)
933 if (has_native_backlight(sna_output))
936 DBG(("%s(%s)\n", __FUNCTION__, sna_output->base->name));
937 backlight_off(&sna_output->backlight);
938 sna_output_backlight_set(sna_output, 0);
942 sna_output_backlight_on(struct sna_output *sna_output)
944 DBG(("%s(%s)\n", __FUNCTION__, sna_output->base->name));
945 sna_output_backlight_set(sna_output,
946 sna_output->backlight_active_level);
947 if (backlight_on(&sna_output->backlight) < 0)
948 sna_output_backlight_disable(sna_output);
954 struct sna_output *sna_output = output->driver_private;
955 int level = backlight_get(&sna_output->backlight);
957 output->name, level, sna_output->backlight.max));
1018 struct sna_output *sna_output = output->driver_private;
1026 if (sna_output->connector_type >= ARRAY_SIZE(sysfs_connector_types))
1036 sysfs_connector_types[sna_output->connector_type],
1037 sna_output->connector_type_id);
1075 struct sna_output *sna_output = output->driver_private;
1084 if (sna_output->is_panel) {
1095 if (!sna_output->is_panel)
1107 sna_output->backlight_active_level =
1108 backlight_open(&sna_output->backlight, best_iface);
1110 __FUNCTION__, output->name, sna_output->backlight_active_level));
1111 if (sna_output->backlight_active_level < 0)
1114 switch (sna_output->backlight.type) {
1122 sna_output->backlight.iface, best_iface, output->name);
3733 find_property(struct sna *sna, struct sna_output *output, const char *name)
3753 static void update_properties(struct sna *sna, struct sna_output *output)
3780 struct sna_output *sna_output = output->driver_private;
3784 DBG(("%s(%s:%d)\n", __FUNCTION__, output->name, sna_output->id));
3785 sna_output->update_properties = false;
3787 if (!sna_output->id) {
3794 if (sna_output->last_detect != 0 &&
3795 (int32_t)(now - sna_output->last_detect) <= OUTPUT_STATUS_CACHE_MS) {
3797 __FUNCTION__, output->name, now - sna_output->last_detect,
3798 sna_output->status));
3799 sna_output->update_properties = true;
3800 return sna_output->status;
3804 compat_conn.conn.connector_id = sna_output->id;
3805 sna_output->num_modes = compat_conn.conn.count_modes = 0; /* reprobe */
3807 compat_conn.conn.count_props = sna_output->num_props;
3808 compat_conn.conn.props_ptr = (uintptr_t)sna_output->prop_ids;
3809 compat_conn.conn.prop_values_ptr = (uintptr_t)sna_output->prop_values;
3815 sna_output->num_modes, compat_conn.conn.count_modes,
3816 sna_output->num_props, compat_conn.conn.count_props));
3818 assert(compat_conn.conn.count_props == sna_output->num_props);
3820 while (compat_conn.conn.count_modes && compat_conn.conn.count_modes != sna_output->num_modes) {
3824 old_count = sna_output->num_modes;
3825 new_modes = realloc(sna_output->modes,
3826 sizeof(*sna_output->modes)*compat_conn.conn.count_modes);
3830 sna_output->modes = new_modes;
3831 sna_output->num_modes = compat_conn.conn.count_modes;
3832 compat_conn.conn.modes_ptr = (uintptr_t)sna_output->modes;
3836 sna_output->num_modes = min(old_count, sna_output->num_modes);
3839 VG(VALGRIND_MAKE_MEM_DEFINED(sna_output->modes, sizeof(*sna_output->modes)*sna_output->num_modes));
3843 __FUNCTION__, output->name, sna_output->num_modes, compat_conn.conn.connection));
3845 sna_output->reprobe = false;
3846 sna_output->last_detect = now;
3849 sna_output->status = XF86OutputStatusConnected;
3854 sna_output->status = XF86OutputStatusDisconnected;
3858 sna_output->status = XF86OutputStatusUnknown;
3861 return sna_output->status;
3867 struct sna_output *sna_output = output->driver_private;
3885 if (sna_output->has_panel_limits) {
3886 if (mode->HDisplay > sna_output->panel_hdisplay ||
3887 mode->VDisplay > sna_output->panel_vdisplay)
3919 struct sna_output *sna_output = output->driver_private;
3924 if (sna_output->edid_idx == -1)
3931 if (sna_output->update_properties)
3932 update_properties(sna, sna_output);
3934 raw = sna_output->edid_raw;
3935 blob.length = sna_output->edid_len;
3943 blob.blob_id = sna_output->prop_values[sna_output->edid_idx];
3949 blob.blob_id, sna_output->edid_blob_id));
3950 if (blob.blob_id == sna_output->edid_blob_id && 0) { /* sigh */
3956 sna_output->edid_len,
3957 sna_output->edid_raw,
3969 update_properties(sna, sna_output);
3970 if (blob.blob_id == sna_output->prop_values[sna_output->edid_idx]) {
3975 blob.blob_id = sna_output->prop_values[sna_output->edid_idx];
3984 if (blob.length > sna_output->edid_len) {
3992 } while (blob.length != sna_output->edid_len &&
4002 blob.length == sna_output->edid_len &&
4006 assert(sna_output->edid_raw == raw);
4007 sna_output->edid_blob_id = blob.blob_id;
4011 sna_output->edid_len,
4012 sna_output->edid_raw,
4027 sna_output->edid_raw = raw;
4028 sna_output->edid_len = blob.length;
4029 sna_output->edid_blob_id = blob.blob_id;
4038 struct sna_output *sna_output = output->driver_private;
4044 id = find_property(sna, sna_output, "TILE");
4049 if (sna_output->update_properties)
4050 update_properties(sna, sna_output);
4053 blob.blob_id = sna_output->prop_values[id];
4242 struct sna_output *sna_output = output->driver_private;
4245 if (sna_output->fake_edid_raw == NULL)
4248 mon = xf86InterpretEDID(output->scrn->scrnIndex, sna_output->fake_edid_raw);
4263 struct sna_output *sna_output = output->driver_private;
4267 DBG(("%s(%s:%d)\n", __FUNCTION__, output->name, sna_output->id));
4268 assert(sna_output->id);
4278 if (output->crtc && !sna_output->hotplug_count) {
4301 DBG(("%s: adding %d probed modes\n", __FUNCTION__, sna_output->num_modes));
4303 for (i = 0; i < sna_output->num_modes; i++) {
4311 &sna_output->modes[i],
4332 sna_output->has_panel_limits = false;
4333 if (sna_output->is_panel) {
4334 sna_output->panel_hdisplay = sna_output->panel_vdisplay = 0;
4335 for (i = 0; i < sna_output->num_modes; i++) {
4338 m = &sna_output->modes[i];
4339 if (m->hdisplay > sna_output->panel_hdisplay)
4340 sna_output->panel_hdisplay = m->hdisplay;
4341 if (m->vdisplay > sna_output->panel_vdisplay)
4342 sna_output->panel_vdisplay = m->vdisplay;
4344 sna_output->has_panel_limits =
4345 sna_output->panel_hdisplay &&
4346 sna_output->panel_vdisplay;
4349 if (sna_output->add_default_modes)
4358 struct sna_output *sna_output = output->driver_private;
4361 if (sna_output == NULL)
4364 free(sna_output->edid_raw);
4365 free(sna_output->fake_edid_raw);
4367 for (i = 0; i < sna_output->num_props; i++) {
4368 if (sna_output->props[i].kprop == NULL)
4371 if (sna_output->props[i].atoms) {
4373 RRDeleteOutputProperty(output->randr_output, sna_output->props[i].atoms[0]);
4374 free(sna_output->props[i].atoms);
4377 drmModeFreeProperty(sna_output->props[i].kprop);
4379 free(sna_output->props);
4380 free(sna_output->prop_ids);
4381 free(sna_output->prop_values);
4383 backlight_close(&sna_output->backlight);
4385 free(sna_output);
4393 struct sna_output *sna_output = output->driver_private;
4394 int old_dpms = sna_output->dpms_mode;
4397 __FUNCTION__, output->name, sna_output->id,
4398 dpms, sna_output->dpms_mode,
4401 if (!sna_output->id)
4414 if (sna_output->backlight.iface && dpms != DPMSModeOn) {
4416 sna_output->backlight_active_level = sna_output_backlight_get(output);
4418 __FUNCTION__, output->name, sna_output->id,
4419 sna_output->backlight_active_level));
4421 sna_output->dpms_mode = dpms;
4422 sna_output_backlight_off(sna_output);
4427 sna_output->id,
4428 sna_output->dpms_id,
4431 __FUNCTION__, output->name, sna_output->id, dpms, fixup));
4438 if (sna_output->backlight.iface && dpms == DPMSModeOn) {
4440 __FUNCTION__, output->name, sna_output->id,
4441 sna_output->backlight_active_level));
4442 sna_output_backlight_on(sna_output);
4445 sna_output->dpms_mode = dpms;
4503 struct sna_output *sna_output = output->driver_private;
4506 sna_output->props = calloc(sna_output->num_props,
4508 if (!sna_output->props)
4511 for (i = 0; i < sna_output->num_props; i++) {
4512 struct sna_property *p = &sna_output->props[i];
4515 sna_output->prop_ids[i]);
4532 sna_output->prop_values[i],
4557 if (p->kprop->enums[j].value == sna_output->prop_values[i])
4570 if (sna_output->backlight.iface) {
4577 sna_output->backlight.max,
4578 sna_output->backlight_active_level,
4583 sna_output->backlight.max,
4584 sna_output->backlight_active_level,
4594 struct sna_output *sna_output = output->driver_private;
4609 __FUNCTION__, (int)val, sna_output->backlight.max));
4610 if (val < 0 || val > sna_output->backlight.max)
4613 sna_output->backlight_active_level = val;
4614 if (sna_output->dpms_mode == DPMSModeOn)
4615 ret = sna_output_backlight_set(sna_output, val);
4619 if (!sna_output->id)
4622 for (i = 0; i < sna_output->num_props; i++) {
4623 struct sna_property *p = &sna_output->props[i];
4636 drmModeConnectorSetProperty(sna->kgem.fd, sna_output->id,
4655 drmModeConnectorSetProperty(sna->kgem.fd, sna_output->id,
4674 struct sna_output *sna_output = output->driver_private;
4680 if (!sna_output->backlight.iface)
4683 if (sna_output->dpms_mode == DPMSModeOn) {
4690 val = sna_output->backlight_active_level;
4707 for (i = 0; i < sna_output->num_props; i++) {
4708 struct sna_property *p = &sna_output->props[i];
4713 if (sna_output->update_properties && output->scrn->vtSema)
4714 update_properties(to_sna(output->scrn), sna_output);
4721 &sna_output->prop_values[i],
4725 if (p->kprop->enums[j].value == sna_output->prop_values[i])
4896 struct sna_output *sna_output = to_sna_output(output);
4898 assert(sna_output);
4900 if (sna_output->id) {
4901 output->possible_clones = sna_output->possible_encoders;
4902 encoder_mask[i] = sna_output->attached_encoders;
4931 struct sna_output *sna_output,
4938 id = find_property(sna, sna_output, "PATH");
4944 blob.blob_id = sna_output->prop_values[id];
5040 struct sna_output *sna_output = output->driver_private;
5076 sna_output->fake_edid_raw = raw;
5097 struct sna_output *sna_output;
5194 sna_output = calloc(sizeof(struct sna_output), 1);
5195 if (!sna_output)
5198 sna_output->connector_type = compat_conn.conn.connector_type;
5199 sna_output->connector_type_id = compat_conn.conn.connector_type_id;
5200 sna_output->num_props = compat_conn.conn.count_props;
5201 sna_output->prop_ids = malloc(sizeof(uint32_t)*compat_conn.conn.count_props);
5202 sna_output->prop_values = malloc(sizeof(uint64_t)*compat_conn.conn.count_props);
5203 if (sna_output->prop_ids == NULL || sna_output->prop_values == NULL) {
5204 free(sna_output->prop_ids);
5205 free(sna_output->prop_values);
5206 free(sna_output);
5215 compat_conn.conn.count_props = sna_output->num_props;
5216 compat_conn.conn.props_ptr = (uintptr_t)sna_output->prop_ids;
5217 compat_conn.conn.prop_values_ptr = (uintptr_t)sna_output->prop_values;
5226 assert(sna_output->num_props == compat_conn.conn.count_props);
5227 VG(VALGRIND_MAKE_MEM_DEFINED(sna_output->prop_ids, sizeof(uint32_t)*sna_output->num_props));
5228 VG(VALGRIND_MAKE_MEM_DEFINED(sna_output->prop_values, sizeof(uint64_t)*sna_output->num_props));
5231 path = name_from_path(sna, sna_output, name);
5313 sna_output->id = compat_conn.conn.connector_id;
5314 sna_output->is_panel = is_panel(compat_conn.conn.connector_type);
5315 sna_output->edid_idx = find_property(sna, sna_output, "EDID");
5316 sna_output->link_status_idx =
5317 find_property(sna, sna_output, "link-status");
5318 if (find_property(sna, sna_output, "scaling mode") != -1)
5319 sna_output->add_default_modes =
5322 i = find_property(sna, sna_output, "DPMS");
5324 sna_output->dpms_id = sna_output->prop_ids[i];
5325 sna_output->dpms_mode = sna_output->prop_values[i];
5327 __FUNCTION__, i, sna_output->dpms_id, sna_output->dpms_mode));
5329 sna_output->dpms_mode = DPMSModeOff;
5331 sna_output->possible_encoders = possible_encoders;
5332 sna_output->attached_encoders = attached_encoders;
5340 output->driver_private = sna_output;
5341 sna_output->base = output;
5343 backlight_init(&sna_output->backlight);
5362 sna_output->serial = serial;
5372 sna_output->attached_encoders,
5373 sna_output->possible_encoders,
5374 serial, sna_output->edid_idx, sna_output->dpms_id,
5376 assert(sna_output->id == id);
5386 free(sna_output->prop_ids);
5387 free(sna_output->prop_values);
5388 free(sna_output);
5396 struct sna_output *sa = to_sna_output(*a);
5397 struct sna_output *sb = to_sna_output(*b);
5470 struct sna_output *output = to_sna_output(config->output[i]);
5481 output_retrain_link(struct sna *sna, struct sna_output *output)
5494 output_check_link(struct sna *sna, struct sna_output *output)
5523 output_check_status(struct sna *sna, struct sna_output *output)
5654 struct sna_output *sna_output = to_sna_output(output);
5656 if (sna_output->id == 0)
5659 if (sna_output->serial == serial) {
5660 if (output_check_status(sna, sna_output)) {
5662 __FUNCTION__, output->name, sna_output->id));
5663 sna_output->last_detect = now;
5666 __FUNCTION__, output->name, sna_output->id));
5667 sna_output->hotplug_count++;
5668 sna_output->last_detect = 0;
5675 __FUNCTION__, output->name, sna_output->id,
5676 sna_output->serial, serial));
5681 sna_output->id = 0;
5682 sna_output->last_detect = 0;
5728 struct sna_output *sna_output = to_sna_output(output);
5730 if (sna_output->id == 0)
5732 if (sna_output->last_detect)
7511 struct sna_output *sna_output = to_sna_output(output);
7513 if (!sna_output->is_panel)
7522 if (sna_output->num_modes == 0)
7525 width = sna_output->modes[0].hdisplay;
7526 height = sna_output->modes[0].vdisplay;
7783 struct sna_output *output = to_sna_output(config->output[i]);
8521 struct sna_output *sna_output;
8526 sna_output = to_sna_output(output);
8527 if (sna_output == NULL)
8530 sna_output->dpms_mode = DPMSModeOff;
8592 struct sna_output *sna_output = to_sna_output(config->output[i]);
8594 assert(sna_output != NULL);
8595 if (sna_output->dpms_mode != DPMSModeOff)
8598 if (!sna_output->backlight.iface)
8601 sna_output_backlight_set(sna_output,
8602 sna_output->backlight_active_level);