Lines Matching +full:m +full:- +full:den

1 // SPDX-License-Identifier: GPL-2.0-only
6 * (c) 1998-2002 Petr Vandrovec <vandrove@vc.cvut.cz>
71 0, WLMAX - BLMIN, 1, 379 - BLMIN,
91 0, ARRAY_SIZE(maven_gamma) - 1, 1, 3,
110 -EINVAL: id not found, return failure
111 -ENOENT: id not found, create fake disabled control */
118 return -EINVAL; in get_ctrl_id()
120 return -ENOENT; in get_ctrl_id()
126 return -EINVAL; in get_ctrl_id()
136 return (int*)((char*)(md->primary_head) + maven_controls[idx].control); in get_ctrl_ptr()
143 .addr = c->addr, in maven_get_reg()
149 .addr = c->addr, in maven_get_reg()
157 err = i2c_transfer(c->adapter, msgs, 2); in maven_get_reg()
201 unsigned int den; member
216 .den = 50
221 .den = 60
230 unsigned int fxtal = ctl->ref_freq; in matroxfb_PLL_mavenclock()
231 unsigned int fmin = pll->vco_freq_min / ctl->den; in matroxfb_PLL_mavenclock()
239 scrlen = htotal * (vtotal - 1); in matroxfb_PLL_mavenclock()
241 fmax = pll->vco_freq_max / ctl->den; in matroxfb_PLL_mavenclock()
245 for (p = 1; p <= pll->post_shift_max; p++) { in matroxfb_PLL_mavenclock()
252 for (; p-- > 0; fwant >>= 1) { in matroxfb_PLL_mavenclock()
253 unsigned int m; in matroxfb_PLL_mavenclock() local
256 for (m = pll->in_div_min; m <= pll->in_div_max; m++) { in matroxfb_PLL_mavenclock()
261 n = (fwant * m) / fxtal; in matroxfb_PLL_mavenclock()
262 if (n < pll->feed_div_min) in matroxfb_PLL_mavenclock()
264 if (n > pll->feed_div_max) in matroxfb_PLL_mavenclock()
268 dvd = m << p; in matroxfb_PLL_mavenclock()
276 ln = ln - scrlen; in matroxfb_PLL_mavenclock()
279 dprintk(KERN_DEBUG "Match: %u / %u / %u / %u\n", n, m, p, ln); in matroxfb_PLL_mavenclock()
284 *in = m; in matroxfb_PLL_mavenclock()
295 return fxtal * (*feed) / (*in) * ctl->den; in matroxfb_PLL_mavenclock()
307 return -EINVAL; in matroxfb_mavenclock()
308 p = (1 << p) - 1; in matroxfb_mavenclock()
327 p = (1 << p) - 1; in DAC1064_calcclock()
343 df = (md->version == MGATVO_B?0x40:0x00); in maven_compute_deflicker()
344 switch (md->primary_head->altout.tvo_params.deflicker) { in maven_compute_deflicker()
360 const int b = md->primary_head->altout.tvo_params.brightness + BLMIN; in maven_compute_bwlevel()
361 const int c = md->primary_head->altout.tvo_params.contrast; in maven_compute_bwlevel()
363 *bl = max(b - c, BLMIN); in maven_compute_bwlevel()
368 return maven_gamma + md->primary_head->altout.tvo_params.gamma; in maven_compute_gamma()
385 0x3F, 0x03, /* 0E-0F */ in maven_init_TVdata()
386 0x3F, 0x03, /* 10-11 */ in maven_init_TVdata()
389 0x1C, 0x3D, 0x14, /* 14-16 */ in maven_init_TVdata()
390 0x9C, 0x01, /* 17-18 */ in maven_init_TVdata()
396 0x89, 0x03, /* 1E-1F */ in maven_init_TVdata()
407 0x55, 0x01, /* 2A-2B */ in maven_init_TVdata()
409 0x07, 0x7E, /* 2D-2E */ in maven_init_TVdata()
410 0x02, 0x54, /* 2F-30 */ in maven_init_TVdata()
411 0xB0, 0x00, /* 31-32 */ in maven_init_TVdata()
421 0x3F, 0x03, /* 3C-3D */ in maven_init_TVdata()
437 0x41, 0x00, /* 0E-0F */ in maven_init_TVdata()
438 0x3C, 0x00, /* 10-11 */ in maven_init_TVdata()
441 0x1B, 0x1B, 0x24, /* 14-16 */ in maven_init_TVdata()
442 0x83, 0x01, /* 17-18 */ in maven_init_TVdata()
448 0x89, 0x02, /* 1E-1F */ in maven_init_TVdata()
459 0xFF, 0x03, /* 2A-2B */ in maven_init_TVdata()
461 0x0F, 0x78, /* 2D-2E */ in maven_init_TVdata()
462 0x00, 0x00, /* 2F-30 */ in maven_init_TVdata()
463 0xB2, 0x04, /* 31-32 */ in maven_init_TVdata()
473 0x3C, 0x00, /* 3C-3D */ in maven_init_TVdata()
477 struct matrox_fb_info *minfo = md->primary_head; in maven_init_TVdata()
479 if (minfo->outputs[1].mode == MATROXFB_OUTPUT_MODE_PAL) in maven_init_TVdata()
485 data->regs[0x93] = maven_compute_deflicker(md); in maven_init_TVdata()
491 data->regs[0x83] = g->reg83; in maven_init_TVdata()
492 data->regs[0x84] = g->reg84; in maven_init_TVdata()
493 data->regs[0x85] = g->reg85; in maven_init_TVdata()
494 data->regs[0x86] = g->reg86; in maven_init_TVdata()
495 data->regs[0x87] = g->reg87; in maven_init_TVdata()
496 data->regs[0x88] = g->reg88; in maven_init_TVdata()
497 data->regs[0x89] = g->reg89; in maven_init_TVdata()
498 data->regs[0x8A] = g->reg8a; in maven_init_TVdata()
499 data->regs[0x8B] = g->reg8b; in maven_init_TVdata()
506 data->regs[0x0e] = bl >> 2; in maven_init_TVdata()
507 data->regs[0x0f] = bl & 3; in maven_init_TVdata()
508 data->regs[0x1e] = wl >> 2; in maven_init_TVdata()
509 data->regs[0x1f] = wl & 3; in maven_init_TVdata()
514 data->regs[0x20] = in maven_init_TVdata()
515 data->regs[0x22] = minfo->altout.tvo_params.saturation; in maven_init_TVdata()
519 data->regs[0x25] = minfo->altout.tvo_params.hue; in maven_init_TVdata()
523 #define LR(x) maven_set_reg(c, (x), m->regs[(x)])
524 #define LRP(x) maven_set_reg_pair(c, (x), m->regs[(x)] | (m->regs[(x)+1] << 8))
525 static void maven_init_TV(struct i2c_client* c, const struct mavenregs* m) { in maven_init_TV() argument
561 if (m->mode == MATROXFB_OUTPUT_MODE_PAL) { in maven_init_TV()
599 if (m->mode == MATROXFB_OUTPUT_MODE_PAL) in maven_init_TV()
699 if (m->mode == MATROXFB_OUTPUT_MODE_PAL) in maven_init_TV()
724 struct mavenregs* m) { in maven_find_exact_clocks() argument
729 m->regs[0x80] = 0x0F; in maven_find_exact_clocks()
730 m->regs[0x81] = 0x07; in maven_find_exact_clocks()
731 m->regs[0x82] = 0x81; in maven_find_exact_clocks()
739 …if (!matroxfb_mavenclock((m->mode == MATROXFB_OUTPUT_MODE_PAL) ? &maven_PAL : &maven_NTSC, h, vt, … in maven_find_exact_clocks()
740 unsigned int diff = h - h2; in maven_find_exact_clocks()
744 m->regs[0x80] = a - 1; in maven_find_exact_clocks()
745 m->regs[0x81] = b - 1; in maven_find_exact_clocks()
746 m->regs[0x82] = c | 0x80; in maven_find_exact_clocks()
747 m->hcorr = h2 - 2; in maven_find_exact_clocks()
748 m->htotal = h - 2; in maven_find_exact_clocks()
757 struct mavenregs* m) { in maven_compute_timming() argument
760 struct matrox_fb_info *minfo = md->primary_head; in maven_compute_timming()
762 m->mode = minfo->outputs[1].mode; in maven_compute_timming()
763 if (m->mode != MATROXFB_OUTPUT_MODE_MONITOR) { in maven_compute_timming()
770 maven_init_TVdata(md, m); in maven_compute_timming()
772 if (maven_find_exact_clocks(mt->HTotal, mt->VTotal, m) == 0) in maven_compute_timming()
773 return -EINVAL; in maven_compute_timming()
775 lmargin = mt->HTotal - mt->HSyncEnd; in maven_compute_timming()
776 slen = mt->HSyncEnd - mt->HSyncStart; in maven_compute_timming()
777 hcrt = mt->HTotal - slen - mt->delay; in maven_compute_timming()
778 umargin = mt->VTotal - mt->VSyncEnd; in maven_compute_timming()
779 vslen = mt->VSyncEnd - mt->VSyncStart; in maven_compute_timming()
781 if (m->hcorr < mt->HTotal) in maven_compute_timming()
782 hcrt += m->hcorr; in maven_compute_timming()
783 if (hcrt > mt->HTotal) in maven_compute_timming()
784 hcrt -= mt->HTotal; in maven_compute_timming()
785 if (hcrt + 2 > mt->HTotal) in maven_compute_timming()
789 /* hlen - 2 */ in maven_compute_timming()
790 m->regs[0x96] = m->hcorr; in maven_compute_timming()
791 m->regs[0x97] = m->hcorr >> 8; in maven_compute_timming()
793 m->regs[0x98] = 0x00; m->regs[0x99] = 0x00; in maven_compute_timming()
795 m->regs[0x9A] = lmargin; /* 100% */ in maven_compute_timming()
796 m->regs[0x9B] = lmargin >> 8; /* 100% */ in maven_compute_timming()
798 m->regs[0x9C] = 0x04; in maven_compute_timming()
799 m->regs[0x9D] = 0x00; in maven_compute_timming()
800 /* htotal - 2 */ in maven_compute_timming()
801 m->regs[0xA0] = m->htotal; in maven_compute_timming()
802 m->regs[0xA1] = m->htotal >> 8; in maven_compute_timming()
804 m->regs[0xA2] = mt->VTotal - mt->VSyncStart - 1; /* stop vblanking */ in maven_compute_timming()
805 m->regs[0xA3] = (mt->VTotal - mt->VSyncStart - 1) >> 8; in maven_compute_timming()
807 if (md->version == MGATVO_B) { in maven_compute_timming()
808 m->regs[0xA4] = 0x04; in maven_compute_timming()
809 m->regs[0xA5] = 0x00; in maven_compute_timming()
811 m->regs[0xA4] = 0x01; in maven_compute_timming()
812 m->regs[0xA5] = 0x00; in maven_compute_timming()
814 /* something start... 0..[A4]-1 */ in maven_compute_timming()
815 m->regs[0xA6] = 0x00; in maven_compute_timming()
816 m->regs[0xA7] = 0x00; in maven_compute_timming()
817 /* vertical line count - 1 */ in maven_compute_timming()
818 m->regs[0xA8] = mt->VTotal - 1; in maven_compute_timming()
819 m->regs[0xA9] = (mt->VTotal - 1) >> 8; in maven_compute_timming()
821 m->regs[0xAA] = hcrt; /* 0 <= hcrt <= htotal - 2 */ in maven_compute_timming()
822 m->regs[0xAB] = hcrt >> 8; in maven_compute_timming()
824 m->regs[0xAC] = mt->VTotal - 2; in maven_compute_timming()
825 m->regs[0xAD] = (mt->VTotal - 2) >> 8; in maven_compute_timming()
827 m->regs[0xAE] = 0x01; /* Fix this... 0..VTotal */ in maven_compute_timming()
828 m->regs[0xAF] = 0x00; in maven_compute_timming()
832 unsigned int ibmin = 4 + lmargin + mt->HDisplay; in maven_compute_timming()
838 if (mt->HTotal) in maven_compute_timming()
839 hdec = 94208 / (mt->HTotal); in maven_compute_timming()
846 hdec--; in maven_compute_timming()
847 hlen = 98304 - 128 - ((lmargin + mt->HDisplay - 8) * hdec); in maven_compute_timming()
860 0x3C0000 * i / hdec + Q - R / hdec in maven_compute_timming()
870 ib = ((0x3C0000 * i - 0x8000)/ hdec + 0x05E7) >> 8; in maven_compute_timming()
873 if (ib >= m->htotal + 2) { in maven_compute_timming()
877 m->regs[0x90] = hdec; /* < 0x40 || > 0x80 is bad... 0x80 is questionable */ in maven_compute_timming()
878 m->regs[0xC2] = hlen; in maven_compute_timming()
880 m->regs[0x9E] = ib; in maven_compute_timming()
881 m->regs[0x9F] = ib >> 8; in maven_compute_timming()
888 if (mt->VTotal) { in maven_compute_timming()
894 a = m->vlines * (m->htotal + 2); in maven_compute_timming()
895 b = (mt->VTotal - 1) * (m->htotal + 2) + m->hcorr + 2; in maven_compute_timming()
901 vdec = m->vlines * 32768 / mt->VTotal; in maven_compute_timming()
907 vlen = (vslen + umargin + mt->VDisplay) * vdec; in maven_compute_timming()
908 vlen = (vlen >> 16) - 146; /* FIXME: 146?! */ in maven_compute_timming()
913 vdec--; in maven_compute_timming()
914 m->regs[0x91] = vdec; in maven_compute_timming()
915 m->regs[0x92] = vdec >> 8; in maven_compute_timming()
916 m->regs[0xBE] = vlen; in maven_compute_timming()
918 m->regs[0xB0] = 0x08; /* output: SVideo/Composite */ in maven_compute_timming()
922 DAC1064_calcclock(mt->pixclock, 450000, &a, &bv, &c); in maven_compute_timming()
923 m->regs[0x80] = a; in maven_compute_timming()
924 m->regs[0x81] = bv; in maven_compute_timming()
925 m->regs[0x82] = c | 0x80; in maven_compute_timming()
927 m->regs[0xB3] = 0x01; in maven_compute_timming()
928 m->regs[0x94] = 0xB2; in maven_compute_timming()
931 m->regs[0x96] = mt->HTotal; in maven_compute_timming()
932 m->regs[0x97] = mt->HTotal >> 8; in maven_compute_timming()
934 m->regs[0x98] = 0x00; in maven_compute_timming()
935 m->regs[0x99] = 0x00; in maven_compute_timming()
937 tmpi = mt->HSyncEnd - mt->HSyncStart; in maven_compute_timming()
938 m->regs[0x9A] = tmpi; in maven_compute_timming()
939 m->regs[0x9B] = tmpi >> 8; in maven_compute_timming()
941 tmpi = mt->HTotal - mt->HSyncStart; in maven_compute_timming()
942 m->regs[0x9C] = tmpi; in maven_compute_timming()
943 m->regs[0x9D] = tmpi >> 8; in maven_compute_timming()
945 tmpi += mt->HDisplay; in maven_compute_timming()
946 m->regs[0x9E] = tmpi; in maven_compute_timming()
947 m->regs[0x9F] = tmpi >> 8; in maven_compute_timming()
949 tmpi = mt->HTotal + 1; in maven_compute_timming()
950 m->regs[0xA0] = tmpi; in maven_compute_timming()
951 m->regs[0xA1] = tmpi >> 8; in maven_compute_timming()
953 tmpi = mt->VSyncEnd - mt->VSyncStart - 1; in maven_compute_timming()
954 m->regs[0xA2] = tmpi; in maven_compute_timming()
955 m->regs[0xA3] = tmpi >> 8; in maven_compute_timming()
957 tmpi = mt->VTotal - mt->VSyncStart; in maven_compute_timming()
958 m->regs[0xA4] = tmpi; in maven_compute_timming()
959 m->regs[0xA5] = tmpi >> 8; in maven_compute_timming()
961 tmpi = mt->VTotal - 1; in maven_compute_timming()
962 m->regs[0xA6] = tmpi; in maven_compute_timming()
963 m->regs[0xA7] = tmpi >> 8; in maven_compute_timming()
964 /* vtotal - 1 */ in maven_compute_timming()
965 m->regs[0xA8] = tmpi; in maven_compute_timming()
966 m->regs[0xA9] = tmpi >> 8; in maven_compute_timming()
968 tmpi = mt->HTotal - mt->delay; in maven_compute_timming()
969 m->regs[0xAA] = tmpi; in maven_compute_timming()
970 m->regs[0xAB] = tmpi >> 8; in maven_compute_timming()
972 tmpi = mt->VTotal - 2; in maven_compute_timming()
973 m->regs[0xAC] = tmpi; in maven_compute_timming()
974 m->regs[0xAD] = tmpi >> 8; in maven_compute_timming()
976 m->regs[0xAE] = 0x00; in maven_compute_timming()
977 m->regs[0xAF] = 0x00; in maven_compute_timming()
979 m->regs[0xB0] = 0x03; /* output: monitor */ in maven_compute_timming()
980 m->regs[0xB1] = 0xA0; /* ??? */ in maven_compute_timming()
981 m->regs[0x8C] = 0x20; /* must be set... */ in maven_compute_timming()
982 m->regs[0x8D] = 0x04; /* defaults to 0x10: test signal */ in maven_compute_timming()
983 m->regs[0xB9] = 0x1A; /* defaults to 0x2C: too bright */ in maven_compute_timming()
984 m->regs[0xBF] = 0x22; /* makes picture stable */ in maven_compute_timming()
990 const struct mavenregs* m) { in maven_program_timming() argument
991 struct i2c_client *c = md->client; in maven_program_timming()
993 if (m->mode == MATROXFB_OUTPUT_MODE_MONITOR) { in maven_program_timming()
1022 maven_init_TV(c, m); in maven_program_timming()
1028 struct i2c_client *c = md->client; in maven_resync()
1037 i = get_ctrl_id(p->id); in maven_get_queryctrl()
1042 if (i == -ENOENT) { in maven_get_queryctrl()
1046 i = p->id; in maven_get_queryctrl()
1048 p->id = i; in maven_get_queryctrl()
1049 sprintf(p->name, "Ctrl #%08X", i); in maven_get_queryctrl()
1052 return -EINVAL; in maven_get_queryctrl()
1059 i = get_ctrl_id(p->id); in maven_set_control()
1060 if (i < 0) return -EINVAL; in maven_set_control()
1065 if (p->value == *get_ctrl_ptr(md, i)) return 0; in maven_set_control()
1070 if (p->value > maven_controls[i].desc.maximum) return -EINVAL; in maven_set_control()
1071 if (p->value < maven_controls[i].desc.minimum) return -EINVAL; in maven_set_control()
1076 *get_ctrl_ptr(md, i) = p->value; in maven_set_control()
1078 switch (p->id) { in maven_set_control()
1086 maven_set_reg_pair(md->client, 0x0e, blacklevel); in maven_set_control()
1087 maven_set_reg_pair(md->client, 0x1e, whitelevel); in maven_set_control()
1092 maven_set_reg(md->client, 0x20, p->value); in maven_set_control()
1093 maven_set_reg(md->client, 0x22, p->value); in maven_set_control()
1098 maven_set_reg(md->client, 0x25, p->value); in maven_set_control()
1105 maven_set_reg(md->client, 0x83, g->reg83); in maven_set_control()
1106 maven_set_reg(md->client, 0x84, g->reg84); in maven_set_control()
1107 maven_set_reg(md->client, 0x85, g->reg85); in maven_set_control()
1108 maven_set_reg(md->client, 0x86, g->reg86); in maven_set_control()
1109 maven_set_reg(md->client, 0x87, g->reg87); in maven_set_control()
1110 maven_set_reg(md->client, 0x88, g->reg88); in maven_set_control()
1111 maven_set_reg(md->client, 0x89, g->reg89); in maven_set_control()
1112 maven_set_reg(md->client, 0x8a, g->reg8a); in maven_set_control()
1113 maven_set_reg(md->client, 0x8b, g->reg8b); in maven_set_control()
1119 = maven_get_reg(md->client, 0x8d); in maven_set_control()
1120 if (p->value) val |= 0x10; in maven_set_control()
1122 maven_set_reg(md->client, 0x8d, val); in maven_set_control()
1127 maven_set_reg(md->client, 0x93, maven_compute_deflicker(md)); in maven_set_control()
1140 i = get_ctrl_id(p->id); in maven_get_control()
1141 if (i < 0) return -EINVAL; in maven_get_control()
1142 p->value = *get_ctrl_ptr(md, i); in maven_get_control()
1150 #define minfo (mdinfo->primary_head) in maven_out_compute()
1151 return maven_compute_timming(md, mt, &minfo->hw.maven); in maven_out_compute()
1158 #define minfo (mdinfo->primary_head) in maven_out_program()
1159 return maven_program_timming(md, &minfo->hw.maven); in maven_out_program()
1175 return -EINVAL; in maven_out_verify_mode()
1203 struct matrox_fb_info *minfo = container_of(clnt->adapter, in maven_init_client()
1205 adapter)->minfo; in maven_init_client()
1207 md->primary_head = minfo; in maven_init_client()
1208 md->client = clnt; in maven_init_client()
1209 down_write(&minfo->altout.lock); in maven_init_client()
1210 minfo->outputs[1].output = &maven_altout; in maven_init_client()
1211 minfo->outputs[1].src = minfo->outputs[1].default_src; in maven_init_client()
1212 minfo->outputs[1].data = md; in maven_init_client()
1213 minfo->outputs[1].mode = MATROXFB_OUTPUT_MODE_MONITOR; in maven_init_client()
1214 up_write(&minfo->altout.lock); in maven_init_client()
1216 md->version = MGATVO_B; in maven_init_client()
1219 md->version = MGATVO_C; in maven_init_client()
1238 if (md->primary_head) { in maven_shutdown_client()
1239 struct matrox_fb_info *minfo = md->primary_head; in maven_shutdown_client()
1241 down_write(&minfo->altout.lock); in maven_shutdown_client()
1242 minfo->outputs[1].src = MATROXFB_SRC_NONE; in maven_shutdown_client()
1243 minfo->outputs[1].output = NULL; in maven_shutdown_client()
1244 minfo->outputs[1].data = NULL; in maven_shutdown_client()
1245 minfo->outputs[1].mode = MATROXFB_OUTPUT_MODE_MONITOR; in maven_shutdown_client()
1246 up_write(&minfo->altout.lock); in maven_shutdown_client()
1247 md->primary_head = NULL; in maven_shutdown_client()
1254 struct i2c_adapter *adapter = client->adapter; in maven_probe()
1255 int err = -ENODEV; in maven_probe()
1264 err = -ENOMEM; in maven_probe()
1300 MODULE_AUTHOR("(c) 1999-2002 Petr Vandrovec <vandrove@vc.cvut.cz>");
1301 MODULE_DESCRIPTION("Matrox G200/G400 Matrox MGA-TVO driver");